使用 Creative Senz3D 及其他兼容 Intel RealSense SDK 的深度传感器
注意:由于 PerC SDK 已被 RealSense SDK 取代,本教程已部分过时。
兼容 Intel® RealSense SDK 的深度传感器通过 VideoCapture 类获得支持。借助熟悉的 VideoCapture 接口,可以获取深度图、RGB 图像以及其他一些格式的输出。
要在 OpenCV 中使用深度传感器,你需要完成以下预备步骤:
-
安装 Intel RealSense SDK 2.0(从这里获取)。
-
在 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 );for(;;){ Mat depthMap; capture >> depthMap;
if( waitKey( 30 ) >= 0 ) break;}
要获取多路数据,使用 VideoCapture::grab 和 VideoCapture::retrieve,例如:
VideoCapture capture(CAP_REALSENSE);for(;;){ 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。