RealSense R400系列深度相机的图像获取保存和格式转换

关于RealSense的基础使用的博文用的库有点混杂,挺多博文都是早期maneger的那个库,对那个不是很了解,主要记录一下使用最新的函数库的基础使用。

相机型号:RealSense R435

使用函数库:librealsense2/rs.hpp

1 #include 

命名空间:rs2

1 using namespace rs2;

首先是检查设备并打印设备信息,从context里面查找device。

1 context ctx;
2 auto devicelist = ctx.query_devices();
3 device dev = *devicelist.begin();
4 cout << "rs2_camera_name: " << dev.get_info(RS2_CAMERA_INFO_NAME) << endl;    //相机名字
5 cout << "rs2_camera_serial_number: " << dev.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER) << endl;    //序列号
6 cout << "rs2_firmware_version: " << dev.get_info(RS2_CAMERA_INFO_FIRMWARE_VERSION) << endl;    //固件版本

其次是设置RGB色彩和深度视频流参数,使用config来完成,此外还可以设置使用补洞滤波hole_filling_filter hole_filter。

1 config cfg;
2 cfg.enable_stream(RS2_STREAM_DEPTH, 1280, 720, RS2_FORMAT_Z16, 30);
3 cfg.enable_stream(RS2_STREAM_COLOR, 1280, 720, RS2_FORMAT_BGR8, 30);
4 
5 hole_filling_filter hole_filter;
6 hole_filter.set_option(RS2_OPTION_HOLES_FILL, 2);

最后开启管道,并将设置的config值放入。在循环中等待帧集的到来,并从中读出depth frame 和 color frame,此外可配合OpenCV函数使用将Frame转成Mat。

pipeline pipe;
pipe.start(cfg);
 
while(1)
{
      frameset frames = pipe.wait_for_frames();
      depth_frame depth = frames.get_depth_frame();
      frame color = frames.get_color_frame(); 
      color_mat = Frame2Mat(color);
}

将Frame类型的图像转成Mat类型的具体函数如下:

 1 Mat Frame2Mat(const rs2::frame &frame)
 2 {
 3     auto vf = frame.as();
 4     const int w = vf.get_width();
 5     const int h = vf.get_height();
 6 
 7     if (frame.get_profile().format() == RS2_FORMAT_BGR8)
 8     {
 9         return cv::Mat(cv::Size(w, h), CV_8UC3, (void *)frame.get_data(), cv::Mat::AUTO_STEP);
10     }
11 
12     else if (frame.get_profile().format() == RS2_FORMAT_RGB8)
13     {
14         auto r = cv::Mat(cv::Size(w, h), CV_8UC3, (void *)frame.get_data(), cv::Mat::AUTO_STEP);
15         cv::cvtColor(r, r, CV_RGB2BGR);
16         return r;
17     }
18 
19     else if (frame.get_profile().format() == RS2_FORMAT_Z16)
20     {
21         return cv::Mat(cv::Size(w, h), CV_16UC1, (void *)frame.get_data(), cv::Mat::AUTO_STEP);
22     }
23 
24     else if (frame.get_profile().format() == RS2_FORMAT_Y8)
25     {
26         return cv::Mat(cv::Size(w, h), CV_8UC1, (void *)frame.get_data(), cv::Mat::AUTO_STEP);
27     }
28 }

其中RS2_FORMAT_BGR8和RS2_FORMAT_RGB8是彩色图像帧的格式,RS2_FORMAT_Z16和RS2_FORMAT_Y8是深度图像帧的格式,还有其它格式如果需要可以自行补充。更多图像格式的信息在RealSense的数据手册中可以找到。

 

转载于:https://www.cnblogs.com/mushroomchan/p/get_frame_from_realsense.html

你可能感兴趣的:(RealSense R400系列深度相机的图像获取保存和格式转换)