前回に引き続き、cv::Matクラスについて。 今回は行列演算に関する機能を使います。 上記のシンプルな連立一次方程式を cv::Mat クラスの機能を使って解いてみます。
|
// 係数行列 A float dataA[][3] = { {1.0, -2.0, 3.0}, {3.0, 1.0, -5.0}, {-2.0, 6.0, -9.0} }; // 行列 B float dataB[] = {1.0, -4.0, -2.0}; Mat matA(3, 3, CV_32FC1, dataA); Mat matB(3, 1, CV_32FC1, dataB); Mat matX(3, 1, CV_32FC1); // AX = B を解く. 両辺にAの逆行列を前掛けする matX = matA.inv()*matB; MatConstIterator_<float> iter = matX.begin<float>(); while(iter != matX.end<float>()) printf("%.1f\n", *iter++); |
? 出力結果
CvMatでは cvmInvert -> cvmMul と関数を順番に呼び出さないといけないところを、 cv::Matなら matX = matA.inv()*matB のように直…