1

ステートメントで使用するために配列内の要素の値を取得しようとしていますがif、残念ながら次のコードは機能しません。coutofcompは、配列 C の最初の要素と一致しません。私は OpenCV を初めて使用するので、助けていただければ幸いです。

Mat A = (Mat_<double>(2,1) << u, v); 
Mat B = (Mat_<double>(2,6) << -1/Z,  0 ,  x/Z , x*y , -(x*x+1),y,                                                       
                               0 ,-1/Z,  y/Z ,y*y+1,   -x*y  ,-x);
Mat pinvB = B.inv(DECOMP_SVD);
Mat C=pinvB*A; // 6x1 Array

float comp = C.at<float>(0,0);
cout << "comp " << comp << endl; //This value does not match C[0,0]
cout << "C " << C << endl;

if (comp < 0.0001){
   //process
}
4

2 に答える 2

1

インスタンスMat_<double>は を内部的に保存しますdouble。これを行う場合:

float comp = C.at<float>(0,0);

double を形成するビットの一部を使用しようとしており、それらをfloat. 浮動小数点表現は、a のビットの半分がdouble意味のあるものに変換されないことを意味floatします (float が double の半分のサイズを持つプラットフォームを想定すると、これは非常に一般的です)。C.at<double>だから、代わりに電話してください。

于 2013-06-08T21:52:19.007 に答える
0

実際、 のテンプレート版を使えば、cv::Mat_<_Tp>ピクセル値にアクセスできます。Mat_<_Tp>::operator ()(int y, int x)

cv::Mat_<double> M(3, 3);
for (int i = 0;i < 3; ++i) {
  for (int j = 0;j < 3; ++j) {
    std::cout<<M(i, j)<<std::endl;
  }
}

後でテンプレート引数を double から float に変更した場合、それぞれを変更する必要はありませんat()

于 2013-06-08T22:13:13.703 に答える