我正在将图片读入cv::Mat.
cv::Mat depth_map = cv::imread("patio_depth.jpg", -1);
然后将Mat传递给此函数:(从深度图获取xyz坐标)。
inline cv::Point3d getPoint3D(int x, int y) const
{
cv::Point3d point;
point.x = depth_map.at<cv::Vec3f>(y, x)[0];
point.y = depth_map.at<cv::Vec3f>(y, x)[1];
point.z = depth_map.at<cv::Vec3f>(y, x)[2];
return point;
}
导致断言错误。
Assertion failed <dims <= 2 && data && <unsigned>i0 <unsigned>size.p[0] && <unsigned><i1*DataType<_Tp>::channels>
在\ core \ mat.hpp
中我认为这意味着我使用的Mat与函数不兼容,但是Mat结构会起作用吗?或者我需要以某种方式转换它才能通过它?
答案 0 :(得分:0)
啊,这是因为我正在使用jpg图像。 (正如在opencv论坛上回答的那样)
'您正在阅读JPG图像,因此您在depth_map中获得了BGR图像,而不是浮点数。您应该使用cv :: Vec3b而不是cv :: Vec3f来访问像素。'
就像一个魅力。