理科系の勉強日記

Linux/Ubuntu/Mac/Emacs/Computer vision/Robotics

CvMatについてメモ

cvCreateMat()とcvMat()の違い.

CvMat* matrix1 = cvCreateMat(3, 3, CV_64F);

double a[9];
CvMat matrix2 = cvMat(3, 3, CV_64F, a);

配列の先頭アドレスを渡せるのがcvMatということだった.配列の値を操作するだけでmatrix2の値も変わるので使いやすいかもしれない.CvMat*とCvMatに注意.

CvMat型の配列についてはこう

double b[9*N];
CvMat matrix3[N];
for(int i=0; i<N; i++){
	matrix3[i] = cvMat(3, 3, CV_64F, b+i*9 );
}

と,CvMat*型の配列については

CvMat* matrix4[N];
for(int i=0; i<N; i++){
	matrix4[i] = cvCreateMat(3, 3, CV_64F);
}

となるのかな.関数にほうり込む場合は

cvFoo( matrix1, &matirix2, &matrix3[i],  matrix4[i] );

という感じ?今はvectorとして,値をセットするときはcvmSetを使っています.