opencv realsense 16 位深度图像

Posted

技术标签:

【中文标题】opencv realsense 16 位深度图像【英文标题】:opencv realsense 16 bit depth image 【发布时间】:2017-07-14 13:30:29 【问题描述】:

我有一个实感摄像头,我正在尝试读取 16 位深度的图像。 我有一个问题 - 当我创建具有 16 位值的直接 opencv mat 时,我只看到黑色图像。当我将 16 位图像转换为 255/1000 比例的 8 位图像时,我得到了正常图像,但我不想丢失这些信息。

depthImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_DEPTH, &depthImgData);

pxcBYTE* cpixels = depthImgData.planes[0];

Mat r_depth(frameSize, CV_16UC1, cpixels);

这是我的代码,我在其中转换图像。

您能否告诉我这种行为的原因是什么以及如何获得 16 位图像?

【问题讨论】:

“当我将 16 位图像转换为 255/1000 比例的 8 位图像时”——对于这种转换来说,这是一个非常奇怪的比例因子。 16 位图像中像素强度的实际范围是多少?如果只是除以 ~4 给你一个“正常图像”,那么它看起来更像是存储为 16 位整数的 10 位值。 我是从博客条目中获取的。值范围从 4 到 7k(在我的火车组中)。这里有相同的比例因子 - software.intel.com/en-us/articles/…。我不认为值只有 10 位。此外,当我转换为具有较小比例因子的 16 位时,我得到更清晰的图像(大约 1/4。这不准确)。 【参考方案1】:

您使用哪种实感设备? R200、LR200、SR300 还是 D410?

建议使用在 GitHub 上维护的 librealsense 库/API。 将深度格式配置为 RS2_FORMAT_Z16。而且,我使用下面的代码来获取 16 位深度数据。

auto frame = queue.wait_for_frame();

Mat depth16(Size(640, 480), CV_16U, (void*)frame.get_data(), Mat::AUTO_STEP);

【讨论】:

以上是关于opencv realsense 16 位深度图像的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法从 RealSense 中看到正确的深度图像

图像位深度 8位 16位 24位 32位区别对比 RGB 真彩色 基本概念:(大小,深度,通道)位深度数据类型转换原理 Mat数据读取(opencv里的imread)

RealSense 无红外图像,四个 SR300 上的深度图像损坏

深度相机-介绍

深度图从ros数据类型转换成了opencv数据类型

OpenCV——图像的深度与通道数讲解