opencv :: Mat结构使用深度图?

时间:2015-06-09 12:12:40

标签: c++ opencv

我正在将图片读入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结构会起作用吗?或者我需要以某种方式转换它才能通过它?

1 个答案:

答案 0 :(得分:0)

啊,这是因为我正在使用jpg图像。 (正如在opencv论坛上回答的那样)

'您正在阅读JPG图像,因此您在depth_map中获得了BGR图像,而不是浮点数。您应该使用cv :: Vec3b而不是cv :: Vec3f来访问像素。'

就像一个魅力。