彩色显示RealSense的深度图像

一般用librealsense库采集Realsense相机的图像,然后转换成OpenCV格式,用OpenCV的库函数处理。Realsense的深度图像直接显示会很暗,不是用冷暖色调体现距离的效果,不直观也不美观。所以要将原始数据处理后再显示。

StackOverflow上有用直方图均衡算法处理,详情参考这篇文档:RealSense OpenCV Depth Image Too Dark。其实没必要这么麻烦,librealsense库中就提供了更简单的解决方案,我是在Github的issue页面发现的。很奇怪,其他地方都没有用这个很方便的方法。简单来说,将深度数据用rs2::colorizer处理一下,然后再在OpenCV中显示出来。示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <librealsense2/rs.hpp>
#include <opencv2/opencv.hpp>

int main()
{
rs2::pipeline pipe;
rs2::config cfg;
cfg.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16, 30);
pipe.start(cfg);

rs2::colorizer color_map;

rs2::frameset frames;
for (int i = 0; i < 30; i++) {
frames = pipe.wait_for_frames();
}

rs2::frame depth_frame = frames.get_depth_frame().apply_filter(color_map);
cv::Mat depth(cv::Size(640, 480), CV_8UC3, (void *)depth_frame.get_data(), cv::Mat::AUTO_STEP);

cv::namedWindow("Depth Image", cv::WINDOW_AUTOSIZE);
cv::imshow("Depth Image", depth);
cv::waitKey(0);

return 0;
}

最后显示的深度图像是彩色的,和Intel RealSense Viewer工具中的效果一样。