关于RealSense的基础使用的博文用的库有点混杂,挺多博文都是早期maneger的那个库,对那个不是很了解,主要记录一下使用最新的函数库的基础使用。
相机型号:RealSense R435
使用函数库:librealsense2/rs.hpp
#include <librealsense2/rs.hpp>
命名空间:rs2
using namespace rs2;
首先是检查设备并打印设备信息,从context里面查找device。
context ctx;
auto devicelist = ctx.query_devices();
device dev = *devicelist.begin();
cout << "rs2_camera_name: " << dev.get_info(RS2_CAMERA_INFO_NAME) << endl; //相机名字
cout << "rs2_camera_serial_number: " << dev.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER) << endl; //序列号
cout << "rs2_firmware_version: " << dev.get_info(RS2_CAMERA_INFO_FIRMWARE_VERSION) << endl; //固件版本
其次是设置RGB色彩和深度视频流参数,使用config来完成,此外还可以设置使用补洞滤波hole_filling_filter hole_filter。
config cfg;
cfg.enable_stream(RS2_STREAM_DEPTH, , , RS2_FORMAT_Z16, );
cfg.enable_stream(RS2_STREAM_COLOR, , , RS2_FORMAT_BGR8, ); hole_filling_filter hole_filter;
hole_filter.set_option(RS2_OPTION_HOLES_FILL, );
最后开启管道,并将设置的config值放入。在循环中等待帧集的到来,并从中读出depth frame 和 color frame,此外可配合OpenCV函数使用将Frame转成Mat。
pipeline pipe;
pipe.start(cfg); while()
{
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类型的具体函数如下:
Mat Frame2Mat(const rs2::frame &frame)
{
auto vf = frame.as<rs2::video_frame>();
const int w = vf.get_width();
const int h = vf.get_height(); if (frame.get_profile().format() == RS2_FORMAT_BGR8)
{
return cv::Mat(cv::Size(w, h), CV_8UC3, (void *)frame.get_data(), cv::Mat::AUTO_STEP);
} else if (frame.get_profile().format() == RS2_FORMAT_RGB8)
{
auto r = cv::Mat(cv::Size(w, h), CV_8UC3, (void *)frame.get_data(), cv::Mat::AUTO_STEP);
cv::cvtColor(r, r, CV_RGB2BGR);
return r;
} else if (frame.get_profile().format() == RS2_FORMAT_Z16)
{
return cv::Mat(cv::Size(w, h), CV_16UC1, (void *)frame.get_data(), cv::Mat::AUTO_STEP);
} else if (frame.get_profile().format() == RS2_FORMAT_Y8)
{
return cv::Mat(cv::Size(w, h), CV_8UC1, (void *)frame.get_data(), cv::Mat::AUTO_STEP);
}
}
其中RS2_FORMAT_BGR8和RS2_FORMAT_RGB8是彩色图像帧的格式,RS2_FORMAT_Z16和RS2_FORMAT_Y8是深度图像帧的格式,还有其它格式如果需要可以自行补充。更多图像格式的信息在RealSense的数据手册中可以找到。