1

我正在尝试获取数组中元素的值以便在if语句中使用它,但不幸的是,以下代码对我不起作用。coutof与数组 C的comp第一个元素不匹配。我是 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>实例在内部存储doubles。当你这样做时:

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

您正在尝试使用一些形成双精度的位,并将它们解释为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 回答