访问浮点数cv::Mat的元素
Access element of float cv::Mat
我不明白为什么我不能让这段代码工作:
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_64C1
或double
旋转矩阵覆盖,这就是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
相关文章:
- 如何总结所有cv::Mat元素
- 如何有效地在OpenCV Mat和GpuMat上进行元素处理?
- 获取 2 暗淡 cv::Mat 的非零元素的值
- 检查cv::mat的所有元素是否为正或等于0
- OpenCV 创建 MAT 并添加元素
- Opencv Mat的元素索引产生垃圾
- C++opencv在为Mat(矩阵)元素赋值时,先前指定的元素发生了更改
- 访问OpenCV中的Mat二进制图像元素
- 指向 OpenCV / C++ 中 Mat 中的最后一个元素
- 来自 Mat 的 OpenCV 访问元素
- 比较OpenCV Mat与标量元素
- opencv访问CV_32FC3 BGR CV::Mat的颜色元素
- 在openCV中访问mat中的元素时获取垃圾值
- 有效地在OpenCV Mat中查找元素
- 了解Mat元素Opencv的值
- 一个队列的Mat图像元素:如何
- 如何简洁地将cv::Mat中的每个元素设置为一些标量,如cvSet
- 访问浮点数cv::Mat的元素
- Mat::p ush_back(x) 是否复制 x 元素
- 存储其他信息以及 cv::Mat 元素