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

上一个教程: 使用 Orbbec 3D 相机 (UVC)
下一个教程: 在 Ubuntu 中使用 Wayland highgui 后端

硬件

注意:此教程已部分过时,因为 PerC SDK 已被 RealSense SDK 取代

与 Intel® RealSense SDK 兼容的深度传感器通过 VideoCapture 类支持。可以使用 VideoCapture 的熟悉接口检索深度图、RGB 图像和其他一些格式的输出。

为了在 OpenCV 中使用深度传感器,您应该执行以下初步步骤

  1. 安装 Intel RealSense SDK 2.0(从这里 https://github.com/IntelRealSense/librealsense)。
  2. 通过在 CMake 中设置 WITH_LIBREALSENSE 标志,使用 Intel RealSense SDK 支持配置 OpenCV。如果在安装文件夹中找到 Intel RealSense SDK,则将使用 Intel Realsense SDK 库构建 OpenCV(请参阅 CMake 日志中的 LIBREALSENSE 状态)。
  3. 构建 OpenCV。

VideoCapture 可以检索以下数据

  1. 来自深度生成器的数据
    • CAP_INTELPERC_DEPTH_MAP - 每个像素是一个 16 位整数。该值表示从对象到相机 XY 平面或笛卡尔深度的距离。(CV_16UC1)
    • CAP_INTELPERC_UVDEPTH_MAP - 每个像素包含两个 32 位浮点值,范围为 0-1,表示深度坐标到颜色坐标的映射。(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 用法示例。