OpenCV  4.10.0
开源计算机视觉
加载...
搜索...
无匹配项
使用 Creative Senz3D 和其他与英特尔 RealSense SDK 兼容的深度传感器

上一教程: 使用奥比中光 Astra 3D 相机
下一教程: 在 Ubuntu 中使用 Wayland highgui 后端

硬件

注意:PerC SDK 已被 RealSense SDK 替换,因此本教程在一定程度上已过时

可通过 VideoCapture 类支持与英特尔® RealSense SDK 兼容的深度传感器。深度图、RGB 图像和某些其他格式的输出可以通过使用 VideoCapture 的熟悉界面来检索。

为将深度传感器与 OpenCV 配合使用,您应执行以下初步步骤

  1. 从以下链接安装英特尔 RealSense SDK 2.0 (https://github.com/IntelRealSense/librealsense)。
  2. 通过在 CMake 中设置 WITH_LIBREALSENSE 标志,将 OpenCV 配置为支持英特尔 RealSense SDK。如果在安装文件夹中找到英特尔 RealSense SDK,OpenCV 将通过英特尔 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;
}

为获取多个数据图,请使用 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 的使用示例。