Opencv Matクラスの紹介


マットの概要
Matクラスはopencvを使って画像を処理するのに必ず使うクラスです.使用するときは、次のことを知る必要があります.
1、手動でスペースを開拓する必要はない
2、不要な時にすぐにスペースを解放する必要はない
matクラスは、マトリクスヘッド(マトリクスサイズ、記憶方式、記憶アドレスを含む)と、すべての画素値を指すマトリクス(選択した記憶方式によってはマトリクスが異なる次元であってもよい)のポインタの2つのデータ部分から構成される.マトリクスヘッドの占有オーバーヘッドは小さく、主に画素値マトリクスに販売される.
Opencvは参照カウントメカニズムを用いて,各Matに独自の情報ヘッダを持たせ,コピーコンストラクタはメッセージヘッダとマトリクスポインタのみをコピーし,マトリクスをコピーしない.値付けが必要な場合はcopyToまたはcloneで以下のようにしてください.
Mat A,C;
A = imread("1.jpg",CV_LOAD_IMAGE_COLOR);//          

Mat B(A); //                     ;      
C=A; //   

//     copyTo   clone
Mat A  = Mat::ones(4,5,CV_32F);

Mat B = A.clone()    //clone        ,          , A  

Mat C;
A.copyTo(C) //   C     A     ,         ,     ,   clone()

参照カウントメカニズムを採用しているため、Aが開いたマトリクスカウントは3であり、A、B、Cのいずれかの修正マトリクスは、他のオブジェクト値に影響します.
Mat作成時付与
1、Scalar
Scalarは色を表すことができ、shortタイプのベクトルであり、Scalar(b,g,r,a)はaが使えない場合はScalar(b,g,r)であり、下図のように赤色を保存した図が作成され、CV_8 UC 3は8ビットunsigned char型であり、各画素は3チャネルからなる.
	Mat m(200, 200, CV_8UC3, Scalar(0, 0, 255));
	//cout << m << endl;
	saveImage(m, "test.jpg");

データ型の説明:
• CV_8U - 8-bit unsigned integers ( 0..255 )
• CV_8S - 8-bit signed integers ( -128..127 )
• CV_16U - 16-bit unsigned integers ( 0..65535 )
• CV_16S - 16-bit signed integers ( -32768..32767 )
• CV_32S - 32-bit signed integers ( -2147483648..2147483647 )
• CV_32F - 32-bit floating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )
• CV_64F - 64-bit floating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )
2、eye(),zeros(),ones()
eye単位マトリクスの作成
Mat a = Mat::eye(4,4,CV_32S);
	cout << a << endl;

zerosはすべて0のマトリクスを作成します
Mat a = Mat::zeros(4,4,CV_32S);

onesはすべて1のマトリクスを作成します
Mat a = Mat::ones(4,4,CV_32S);

3 Rect既存のMatの領域を取る

	Mat image = imread("images/alpha.png");
	Mat logo0 = imread("images/logo.png");

	imageROI = image(Rect(10, 20, logo.cols, logo.rows));

Rectの操作
Arar()戻り面積
ポイントがrect内にあるかどうか
Inside(Rect)Rectがrect内にあるかどうか
tl()左上隅座標
br()右下座標
交差を求める
Rect rect = rect1 & rect2;
へいれつしゅうごう
Rect rect = rect1 | rect2;
パン
Rect rectShift = rect + point;
拡大・縮小
Rect rectScale = rect + size;