一般用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工具中的效果一样。