我正在读取图像到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>
核心 mat.hpp
我假设这意味着我正在使用的Mat与函数不兼容,但是什么Mat结构将工作?或者我需要在传递之前转换它吗?
啊,这是因为我使用的是jpg图像。(在openv论坛上回答)
'您正在读取JPG图像,因此您在depth_map中获得BGR图像,而不是float。你应该使用cv::Vec3b而不是cv::Vec3f来访问像素