Skip to content

使用 Creative Senz3D 及其他兼容 Intel RealSense SDK 的深度传感器

注意:由于 PerC SDK 已被 RealSense SDK 取代,本教程已部分过时。

兼容 Intel® RealSense SDK 的深度传感器通过 VideoCapture 类获得支持。借助熟悉的 VideoCapture 接口,可以获取深度图、RGB 图像以及其他一些格式的输出。

要在 OpenCV 中使用深度传感器,你需要完成以下预备步骤:

  1. 安装 Intel RealSense SDK 2.0(从这里获取)。

  2. 在 CMake 中设置 WITH_LIBREALSENSE 标志,以使 OpenCV 配置为支持 Intel RealSense SDK。如果在安装目录中找到了 Intel RealSense SDK,OpenCV 将连同 Intel RealSense SDK 库一起编译(参见 CMake 日志中的 LIBREALSENSE 状态)。

  3. 编译 OpenCV。

VideoCapture 可以获取以下数据:

  1. 来自深度生成器的数据:

    • CAP_INTELPERC_DEPTH_MAP —— 每个像素是一个 16 位整数。该值表示物体到相机 XY 平面的距离,即笛卡尔深度。(CV_16UC1)
    • CAP_INTELPERC_UVDEPTH_MAP —— 每个像素包含两个取值范围为 0 到 1 的 32 位浮点数,表示从深度坐标到彩色坐标的映射。(CV_32FC2)
    • CAP_INTELPERC_IR_MAP —— 每个像素是一个 16 位整数。该值表示反射激光束的强度。(CV_16UC1)
  2. 来自 RGB 图像生成器的数据:

    • CAP_INTELPERC_IMAGE —— 彩色图像。(CV_8UC3)

要从深度传感器获取深度图,使用 VideoCapture::operator>>,例如:

VideoCapture capture( CAP_REALSENSE );
for(;;)
{
Mat depthMap;
capture >> depthMap;
if( waitKey( 30 ) >= 0 )
break;
}

realsense.jpg

要获取多路数据,使用 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。