我不明白为什么我无法让这段代码工作:
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.2\include\
opencv2/core/mat.hpp, line 517
最佳答案
引用善意狩猎的话,“这不是你的错!”
M
已被 CV_64C1
覆盖或double
旋转矩阵,这就是为什么 M.at<float>(i,j)
失败。
所以,不用费心初始化 M
; cv::getRotationMatrix
将处理它并返回 CV_64F
矩阵(当然)可以通过 M.at<double>(i,j)
访问.
关于c++ - 访问 float cv::Mat 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001613/