c++ - FREENECT_DEPTH_REGISTERED 对 libfreenect 没有影响

标签 c++ kinect openkinect

我正在 libfreenect 驱动程序上玩 Kinect(原始 Xbox 版本)(顺便说一句,我在 Ubuntu 12.04 上)。我已经从 git 克隆了最新版本并按照此处的说明手动安装:http://openkinect.org/wiki/Getting_Started#Ubuntu_Manual_Install

我想访问注册的深度值。据我所知,Kinect 是出厂校准的,并且有一个将深度像素与正确的 RGB 像素匹配的查找表。

我可以很好地打开 Kinect 并检索原始的 11 位深度数据。对于 1 到 7.5 米的距离,这给了我非线性范围从 730 到 1045 的值。

运行 device->setDepthFormat(FREENECT_DEPTH_MM); 以毫米为单位生成 Kinect 输出距离,因此 setDepthFormat 似乎有效。

运行 device->setDepthFormat(FREENECT_DEPTH_REGISTERED); 似乎没有效果,因为只输出原始深度值。我错过了什么?

最佳答案

FREENECT_DEPTH_MMFREENECT_DEPTH_REGISTERED 都应返回以毫米为单位的深度。不同之处在于后者是对齐的以匹配RGB视频图像。

libfreenect.h 中的 freenect_depth_format 枚举提供了这些选项:

FREENECT_DEPTH_11BIT = 0, /**< 11 bit depth information in one uint16_t/pixel */
FREENECT_DEPTH_10BIT = 1, /**< 10 bit depth information in one uint16_t/pixel */
FREENECT_DEPTH_11BIT_PACKED = 2, /**< 11 bit packed depth information */
FREENECT_DEPTH_10BIT_PACKED = 3, /**< 10 bit packed depth information */
FREENECT_DEPTH_REGISTERED = 4, /**< processed depth data in mm, aligned to 640x480 RGB */
FREENECT_DEPTH_MM = 5, /**< depth to each pixel in mm, but left unaligned to RGB image */
FREENECT_DEPTH_DUMMY = 2147483647, /**< Dummy value to force enum to be 32 bits wide */

来源:the libfrenect git issues page

配准变换生成深度图像,就好像 RGB 和红外摄像机物理上位于同一位置,并且没有偏移 2.5 厘米。如果您对详细信息感到好奇,请查看源代码。

来源:libfreenect source code

关于c++ - FREENECT_DEPTH_REGISTERED 对 libfreenect 没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12819599/

相关文章:

c++ - 包含 header 会导致解析问题

c++ - 这个双重递归调用如何显示数据 C++

javascript - HTML5 中的 Kinect

c++ - c++项目需要通过kinect进行语音识别的dll

node.js - Node.js 和 Kinect 如何通信?

c++ - 复制 PCL 点云,同时保留组织或 Ransac + 曲面法线计算

c++ - 在点数组中找到最小值的算法

c++ - 使用整数标识符在共享内存上构造对象

opencv - 使用 Kinect 进行手指/手势识别

c++ - 如何在 OpenCV 中对齐 Kinect 的 RGB 和深度图像?