librealsense2 && opencv

采集realsense设备的彩色图像和深度图像,并转换为opencv的cv::Mat图像数据格式

#include  // Include RealSense Cross Platform API
#include
#include
int main(int argc, char * argv[]) try
{
  rs2::log_to_console(RS2_LOG_SEVERITY_ERROR);

  rs2::config cfg;
  ///设置从设备管道获取的深度图和彩色图的配置对象
  ///配置彩色图像流:分辨率640*480,图像格式:BGR, 帧率:30帧/秒
  cfg.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8, 30);
  ///配置深度图像流:分辨率640*480,图像格式:Z16, 帧率:30帧/秒
  cfg.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16, 30);

  ///生成Realsense管道,用来封装实际的相机设备
  rs2::pipeline pipe;
  ///根据给定的配置启动相机管道
  pipe.start(cfg);
  
  rs2::frameset data;
  while(1)
  {
	///等待一帧数据,默认等待5s
    data = pipe.wait_for_frames();

    rs2::frame depth  = data.get_depth_frame(); ///获取深度图像数据
    rs2::frame color = data.get_color_frame();  ///获取彩色图像数据
	if (!color || !depth) break;            ///如果获取不到数据则退出

	///将彩色图像和深度图像转换为Opencv格式
    cv::Mat image(cv::Size(640, 480), CV_8UC3, (void*)color.get_data(), cv::Mat::AUTO_STEP);
    cv::Mat depthmat(cv::Size(640, 480), CV_16U, (void*)depth.get_data(), cv::Mat::AUTO_STEP);
		
	///显示
    cv::imshow("image",image);
    cv::imshow("depth",depthmat);
    cv::waitKey(1);
  }
  return EXIT_SUCCESS;
}
catch (const rs2::error & e)
{	///捕获相机设备的异常
  std::cerr << "RealSense error calling " << e.get_failed_function() << "(" << e.get_failed_args() << "):\n    " << e.what() << std::endl;
  return EXIT_FAILURE;
}
catch (const std::exception& e)
{
  std::cerr<<"Error1 : " << e.what() << std::endl;
  return EXIT_FAILURE;
}




你可能感兴趣的:(Realsense)