我不明白为什么我无法使用此代码:
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
答案 0 :(得分:5)
引用Good Will Hunting,“这不是你的错!”
M
已被CV_64C1
或double
轮换矩阵覆盖,这就是M.at<float>(i,j)
失败的原因。
所以,不要打扰初始化M
; cv::getRotationMatrix
会处理它并返回CV_64F
矩阵,当然可以M.at<double>(i,j)
访问该矩阵。
答案 1 :(得分:0)
我对cv命名空间一无所知,但是我会在第一次调用M.at()时放置一个断点并查看M.的成员。其中一个成员导致错误:
//sure hope it isn't this one