上一篇教程: 使用Orbbec 3D摄像头(UVC)
下一篇教程: 在Ubuntu中使用Wayland highgui后端
硬件
注意:由于PerC SDK已被RealSense SDK取代,本教程部分内容已过时。
兼容Intel® RealSense SDK的深度传感器通过VideoCapture类支持。可以使用VideoCapture熟悉的接口检索深度图、RGB图像和其他一些格式的输出。
为了使用OpenCV中的深度传感器,您应该执行以下初步步骤:
- 安装Intel RealSense SDK 2.0(点击此处 https://github.com/IntelRealSense/librealsense)。
- 通过在CMake中设置WITH_LIBREALSENSE标志来配置OpenCV以支持Intel RealSense SDK。如果在安装文件夹中找到Intel RealSense SDK,则OpenCV将使用Intel RealSense SDK库进行构建(请查看CMake日志中的LIBREALSENSE状态)。
- 构建OpenCV。
VideoCapture可以检索以下数据:
- 深度生成器提供的数据:
- CAP_INTELPERC_DEPTH_MAP - 每个像素都是一个16位整数。该值表示物体到相机XY平面的距离或笛卡尔深度。(CV_16UC1)
- CAP_INTELPERC_UVDEPTH_MAP - 每个像素包含两个范围为0-1的32位浮点数,表示深度坐标到颜色坐标的映射。(CV_32FC2)
- CAP_INTELPERC_IR_MAP - 每个像素都是一个16位整数。该值表示反射激光束的强度。(CV_16UC1)
- RGB图像生成器提供的数据:
- CAP_INTELPERC_IMAGE - 彩色图像。(CV_8UC3)
为了从深度传感器获取深度图,请使用VideoCapture::operator >>,例如:
VideoCapture capture( CAP_REALSENSE );
循环(;;)
{
Mat depthMap;
capture >> depthMap;
if( waitKey( 30 ) >= 0 )
break;
}
为了获取多个数据图,请使用VideoCapture::grab和VideoCapture::retrieve,例如:
VideoCapture capture(CAP_REALSENSE);
循环(;;)
{
Mat depthMap;
Mat image;
Mat irImage;
capture.grab();
capture.retrieve( depthMap, CAP_INTELPERC_DEPTH_MAP );
capture.retrieve( image, CAP_INTELPERC_IMAGE );
capture.retrieve( irImage, CAP_INTELPERC_IR_MAP);
if( waitKey( 30 ) >= 0 )
break;
}
为了设置和获取传感器数据生成器的某些属性,请分别使用VideoCapture::set和VideoCapture::get方法,例如:
VideoCapture capture(CAP_REALSENSE);
capture.set( CAP_INTELPERC_DEPTH_GENERATOR | CAP_PROP_INTELPERC_PROFILE_IDX, 0 );
cout << "FPS " << capture.get( CAP_INTELPERC_DEPTH_GENERATOR+CAP_PROP_FPS ) << endl;
由于支持两种类型的传感器数据生成器(图像生成器和深度生成器),因此有两个标志应用于设置/获取所需生成器的属性:
- CAP_INTELPERC_IMAGE_GENERATOR – 用于访问图像生成器属性的标志。
- CAP_INTELPERC_DEPTH_GENERATOR – 用于访问深度生成器属性的标志。如果未设置这两个属性的任何一个值,则默认为此标志值。
更多信息,请参考opencv/samples/cpp文件夹中的使用方法示例 videocapture_realsense.cpp。