c++ - 访问 float cv::Mat 的元素

标签 c++ opencv

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

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/

相关文章:

c++ - Gstreamer H264 管道滞后

c++ - 动态链接其他库时如何静态链接libgomp?

c++ - SIGSEGV 的高效使用

opencv - 分割边缘

java - OpenCV 不适用于 JavaFx

c++ - C++函数定义未声明参数

c++ - 如果我使用 cout 语句作为 if 语句的条件会发生什么?

OpenCV 2.4.9 和 CUDA 6.5

c++ - 在OpenCV中找到两个梯形的相交面积

python-3.x - 为什么 HoughLinesP 输出 3D 数组,而不是 2D 数组?