OpenCV_ Mat の基本操作 (追記)

 

画像のコピー

完全なコピーの場合は、clone( ) を用いる。

cv::Mat tmp = origImg.clone( );
※ img は Mat 型変数。

 

サイズとデータ型のみをコピーしたい場合。

cv::Mat tmp( origImg.size( ), origImg.type( ), Scalar::all(xxx) );
※ cv::Scalar() は任意の値を指定。

 

全画素の値を設定

濃淡画像 greyImg ( Mat型 )全ての画素値を整数 v にしたい場合。

greyImg = cv::Scalar(v);
ex )
greyImg = cv::Scalar(100);

 

カラー画像 rgbImg ( Mat型 )全ての画素値を r g b で設定したい場合。

rgbImg = cv::Scalar(cv::vec3b(b, g, r ));
ex )
rgbImg = cv::Scalar(cv::Vec3b(30, 20, 10));

このような書き方も可。
int r = 10;
rgbImg = cv::Scalar(cv::Vec3b(30, 20, r));

 

全ての画素値へ定数値の加算減算

濃淡画像 greyImg ( Mat型 )全ての画素値に v を足した結果を得たい場合。

 cv::Mat newImg = greyImg + cv::Scalar( v );
ex )
cv::Mat newImg = greyImg + cv::Scalar( 100 );

 

カラー画像 rgbImg ( Mat型 )全ての画素値 v を足した結果を得たい場合。

cv::Mat newImg = = rgbImg + cv::Scalar(cv::vec3b(b, g, r));

 

減算の場合は、+ を - にする。
※ 飽和処理あり

飽和処理
ある値が指定されたビット幅で表せる最大値または最小値を超えた場合、
そのビット幅にデータを収めるために、
その値を最大値または最小値に置き換える ( 飽和させる ) 処理。

 

全ての画素値を定数倍

画像 img ( Mat型 )全ての 画素値を k 倍にしたい場合。

cv::Mat newImg = img * k;
ex )
cv::Mat newImg = img * 0.5;

 ※ 飽和処理あり

 

画像同士の加算減算

2 枚の画像 ( Mat型 ) において、対応する画素間の加算、減算を行う場合。

cv::Mat newImg = imgA + imgB;

減算の場合は、+ を - にする。
※ 飽和処理あり

 

画像のデータ型を変換

converTo( ) を用いる。

ex )
cv::Mat tmp;
origImg.converTo( tmp, CV_32F, 1.0/255 );
CV_8U では 0 から 255 の整数しか扱えず、負値や 255 を超える値、
小数点が扱えない。
CV_32F (float 型) にした時は、0 ~ 1 の実数値で扱いたい。
故に、全ての値に 1.0 / 255 をかけた。

 

部分画像 ( 画像から矩形範囲を指定 )

画像の一部を特定の色で塗りつぶしたりなど、
画像の一部を指定使用したい時


部分画像は、元の画像にフォーカスを当てたもの。
部分画像の加工すると、元の画像の対応する部分も変化する。
部分のコピーではない

cv::Mat part = cv::Mat(origImg, cv::Rect (x, y, width, height) );

x:part の左上 x 座標。
y:part の左上 y 座標。
width:part の横幅。
height:part の高さ。

 

元画像の X 列を選択した画像、
Y 行を選択した画像にフォーカスを当てたい場合。

cv::Mat partCol = origImg.col( X );
cv::Mat partRow = origImg.row( Y );

※ これもコピーではない

 

画像の代入

Mat 型変数は、右の種類により代入の意味が変わる

cv::Mat aImg = bImg;

aImg と bImg  ( Mat型 ) は、
同じ内容の画像を見ている ( 参照している ) 。
aImag は bImg のコピーではない。

 

cv::Mat Img = ;

Img は 画像の計算結果のコピー
ex )
cv:: Mat cImg = aImg + bImg;
cImg は、  aImg と bImg の画素間加算の結果画像となる。

 

cv::Mat Img = 定数値

Img の全ての画素値は 定数値 となる。

 

こちらから。
http://www.wakayama-u.ac.jp/~chen/opencv/opencv2.html
http://gori-naru.blogspot.jp/2012/11/mat.html

 

以上。