【问题标题】:Using a depth map使用深度图
【发布时间】:2018-08-09 13:58:02
【问题描述】:

我在查找有关如何使用深度图/图像来获取到障碍物的距离的任何信息时遇到问题。

TLDR:我有一个作为 OpenCV Mat 的深度图,我知道它是 CV_16UC1,但我不知道如何得到它的距离。

我有一个英特尔 Realsense D415 摄像头,我已经安装了 SDK、ROS 包装器,我有一个发布了深度图的主题。 (/camera/depth/image_rect_raw)

接下来,我用 C++ 编写了一个小程序,它使用 cv_bridge 将图像转换为 OpenCV 图像,并将其显示在一个窗口中,所以我知道它正在工作。 (图片:https://i.imgur.com/QyKWp2J.png

现在我需要与它保持距离,我不知道该怎么做,也未能成功寻求帮助。 我想我只想使用图像的上半部分或 2/3,因为相机的安装方式,所以底部三分之一/一半将只包含地板/地面。

我觉得为了完成这项工作,我错过了一些大而简单的东西,但我什至不知道现在该做什么。

【问题讨论】:

  • I 深度图通常存储每个像素距视点(相机)的深度(= 距离)。为了获得距离,您只需读取给定像素的单个深度值 (RGB)。
  • 见这个例子:rs-pointcloud.cpp。如果您想知道如何从深度图计算点云,请查看:pointcloud.cpp
  • 我遇到的问题是我无法访问相机 API (=librealsense2),我只有图像提要。原来我真的可以得到像素(x,y)的值并得到以毫米为单位的距离。我只需要知道它是一个 u_int16_t 矩阵。

标签: c++ opencv ros


【解决方案1】:

如果你有一个深度图并且你想从中生成 3D 点,你可以使用 OpenCV 的reprojectImageTo3D() 函数。

在此之前,需要有视差到深度的映射矩阵,可以使用stereoRectify()函数获得。

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2020-01-26
    • 1970-01-01
    • 2014-05-16
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多