访问浮点数cv::Mat的元素

Access element of float cv::Mat

本文关键字:元素 Mat 访问 cv 浮点数      更新时间:2023-10-16

我不明白为什么我不能让这段代码工作:

cv::Mat M(2, 3, CV_32FC1);
cv::Point2f center(20, 20);
M = cv::getRotationMatrix2D(center, 20, 1.0);
float test;
test = M.at<float>(1, 0);
test = M.at<float>(0, 1);
test = M.at<float>(1, 1);

当使用M.at访问元素时,代码失败。出现以下断言:

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si
ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel
s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3
) - 1))*4) & 15) == elemSize1()) in unknown function, file C:OpenCV2.2include
opencv2/core/mat.hpp, line 517

引用心灵捕手的话"这不是你的错!"

M已被CV_64C1double旋转矩阵覆盖,这就是M.at<float>(i,j)失败的原因。

所以,不要初始化M;cv::getRotationMatrix将处理它并返回一个CV_64F矩阵,该矩阵可以(当然)通过M.at<double>(i,j)访问。

我对cv命名空间一无所知,但是我会在第一次调用M.at()时设置一个断点,并查看M.的成员,其中一个成员导致错误:

  • 变暗<= 2
  • data == 0
  • i0 & lt;size.p [0]
  • i1 * DataType<_Tp>::渠道& lt;size.p[1] *通道()
  • ((((sizeof (size_t) & lt; & lt; 28) | 0 x8442211)>> ((DataType<_Tp>::深度),((1 & lt; & lt;3) - 1))*4) &15) == elemSize1() //sure hope it isn't this one