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

Posted

技术标签:

【中文标题】为啥我无法从 RealSense 中看到正确的深度图像【英文标题】:Why I can't see correct depth image from RealSense为什么我无法从 RealSense 中看到正确的深度图像 【发布时间】:2018-01-10 02:59:51 【问题描述】:

我使用 ZR300 来获取深度数据。

我通过两种方式获取深度数据。

第一个直接取depth stream

const uint16_t * depth_image = (const uint16_t *)dev->get_frame_data(rs::stream::depth);

完整的脚本是

        const uint16_t * depth_image = (const uint16_t *)dev->get_frame_data(rs::stream::depth);
        float scale = dev->get_depth_scale();
        float **data;
        data = new float *[HEIGHT];
        for(int dy=0; dy<depth_intrin.height; ++dy)
        
            data[dy] = new float[WIDTH];
            for(int dx=0; dx<depth_intrin.width; ++dx)
            
                 uint16_t depth_value = depth_image[dy * depth_intrin.width + dx];
                 float depth_in_meters = depth_value * scale;
                  if(depth_value == 0) continue;
                 data[dy][dx] = depth_in_meters;
            
        
        Mat depthimage(HEIGHT, WIDTH, CV_32FC1, *data);
        Mat object;
        threshold(depthimage, object, 0.5, 255, THRESH_BINARY);
        imshow("object", object);
        waitKey(1);

第二种方法如示例中所示为

        glPixelTransferf(GL_RED_SCALE, 0xFFFF * dev->get_depth_scale() / 2.8f);
        glDrawPixels(WIDTH, HEIGHT, GL_RED, GL_UNSIGNED_SHORT, dev->get_frame_data(rs::stream::depth));
        glPixelTransferf(GL_RED_SCALE, 1.0f);

但这两个图像不匹配。两个图像并排显示,第一个使用第一种方法。为什么第一种方法没有显示正确的图像。

【问题讨论】:

【参考方案1】:

我认为问题在于你如何启动数组并放入Matrix,你可以查看link以查看问题所在。

还附上了下面的工作示例。

float* d = new float[w*h];
for (int dy = 0; dy<intrins.height; ++dy)

    for (int dx = 0; dx<intrins.width; ++dx)
    
        uint16_t depth_value = depth_image[dy * intrins.width + dx];
        float depth_in_meters = depth_value * scale;
        if (depth_value == 0)  d[dy * intrins.width + dx] = 0;  continue; 
        d[dy * intrins.width + dx] = depth_in_meters;
    

Mat depthimage(h, w, CV_32FC1, d);
Mat object;
threshold(depthimage, object, 0.5, 255, THRESH_BINARY);
imshow(window_name, object);

【讨论】:

以上是关于为啥我无法从 RealSense 中看到正确的深度图像的主要内容,如果未能解决你的问题,请参考以下文章

opencv realsense 16 位深度图像

从 realsense API 或 Open3D 库可视化点云

RealSense R200 播放错误

RealSense OpenCV 深度图像太暗

如何在realsense D435中完全关闭深度传感器?

intel realsense 获取深度图像值