問題
以下の行列の逆行列を求め、出力せよ。
1,2,1,
2,3,1,
1,2,2
その他条件:
「ピボット選択によるガウスの消去法」を使用する。→ CV_LU を指定
int型にキャストして出力。
答え
#include <cv.h>
#include <highgui.h>
#include <cstdio>
using namespace std;
float data[] =
{
1,2,1,
2,3,1,
1,2,2
};
int main( int argc, char **argv)
{
CvMat Matrix_A = cvMat (3,3, CV_32F, data);
CvMat *Matrix_ANSWER = cvCreateMat(3,3, CV_32F);
cvInvert(&Matrix_A, Matrix_ANSWER,CV_LU);
for(int i = 0;i<9;i++)
{
printf("answer[%d] = %d\n",i+1,(int)Matrix_ANSWER->data.fl[i]);
}
cvReleaseMat(&Matrix_ANSWER);
return 0;
}
メモ
関数が何をリターンするかで、ポインタ宣言になるかどうか変わる。
CvMat型はdata部分がunionで定義されている。
参考
http://opencv.jp/opencv/document/opencvref_cxcore_...
Matrix_ANSWERの方は、メモリを解放する。