OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
使用 Orbbec 3D 相机 (UVC)

上一个教程: 使用奥比中光 Astra 3D 相机
下一个教程: 使用 Creative Senz3D 和其他 Intel RealSense SDK 兼容的深度传感器

原始作者Jinyue Chen
兼容性OpenCV >= 4.10

介绍

本教程专门介绍基于 UVC 协议的奥比中光 3D 相机。 对于使用依赖 OpenNI 的旧奥比中光 3D 相机,请参阅之前的教程

与使用基于 OpenNI 的 Astra 3D 相机(需要使用 OpenNI2 SDK 构建 OpenCV)不同,通过 OpenCV 访问奥比中光 UVC 3D 相机不需要安装奥比中光 SDK。 通过使用 cv::VideoCapture 类,用户可以从 3D 相机获取流数据,类似于使用 USB 相机。 深度图和彩色图像的校准和对齐在内部完成。

说明

为了在 OpenCV 中使用 3D 相机,您可以参考 Get Started 安装 OpenCV。

请注意,从 4.11 开始,Mac OS 用户需要使用标志 -DOBSENSOR_USE_ORBBEC_SDK=ON 从源代码编译 OpenCV 才能使用相机

cmake -DOBSENSOR_USE_ORBBEC_SDK=ON ..
make
sudo make install

代码

代码解释

Python

  • 打开奥比中光深度传感器:使用 cv.VideoCapture(0, cv.CAP_OBSENSOR) 尝试打开第一个奥比中光深度传感器设备。 如果相机无法打开,程序将退出并显示错误消息。
  • 循环抓取和处理数据:在无限循环中,代码不断从相机抓取数据。 orbbec_cap.grab() 方法尝试抓取一帧。
  • 处理 BGR 图像:使用 orbbec_cap.retrieve(None, cv.CAP_OBSENSOR_BGR_IMAGE) 来检索 BGR 图像数据。 如果成功检索,则使用 cv.imshow("BGR", bgr_image) 在窗口中显示 BGR 图像。
  • 处理深度图像:使用 orbbec_cap.retrieve(None, cv.CAP_OBSENSOR_DEPTH_MAP) 来检索深度图像数据。 如果成功检索,则首先将深度图像归一化到 0 到 255 的范围,然后应用伪彩色图像,并使用 cv.imshow("DEPTH", color_depth_map) 在窗口中显示结果。
  • 键盘中断:使用 cv.pollKey() 检测键盘事件。 如果按下键,循环将中断,程序结束。
  • 释放资源:退出循环后,使用 orbbec_cap.release() 释放相机资源。

C++

  • 打开奥比中光深度传感器:使用 VideoCapture obsensorCapture(0, CAP_OBSENSOR) 尝试打开第一个奥比中光深度传感器设备。 如果相机无法打开,将显示一条错误消息,程序退出。
  • 检索相机内部参数:使用 obsensorCapture.get() 检索相机的内部参数,包括焦距 (fx, fy) 和主点 (cx, cy)。
  • 循环抓取和处理数据:在无限循环中,代码不断从相机抓取数据。 obsensorCapture.grab() 方法尝试抓取一帧。
  • 处理 BGR 图像:使用 obsensorCapture.retrieve(image, CAP_OBSENSOR_BGR_IMAGE) 来检索 BGR 图像数据。 如果成功检索,则使用 imshow("BGR", image) 在窗口中显示 BGR 图像。
  • 处理深度图像:使用 obsensorCapture.retrieve(depthMap, CAP_OBSENSOR_DEPTH_MAP) 来检索深度图像数据。 如果成功检索,则对深度图像进行归一化并应用伪彩色图像,然后使用 imshow("DEPTH", adjDepthMap) 在窗口中显示结果。 检索到的深度值以毫米为单位,并被截断为 300 到 5000(毫米)之间的范围。 这个固定的范围可以解释为基于深度相机深度范围的截断,消除了深度图上的无效像素。
  • 将深度图覆盖在 BGR 图像上:将深度图转换为 8 位图像,调整其大小以匹配 BGR 图像的大小,并以指定的透明度 (alpha) 将其覆盖在 BGR 图像上。 叠加的图像使用 imshow("DepthToColor", image) 显示在窗口中。
  • 键盘中断:使用 pollKey() 检测键盘事件。 如果按下键,循环将中断,程序结束。
  • 释放资源:退出循环后,相机资源将被释放。

结果

Python

BGR 和 DEPTH 帧

C++

BGR 和 DEPTH 和 DepthToColor 帧

注意

  • Mac 用户需要 sudo 权限才能执行代码。
  • 固件:如果您使用的是奥比中光 UVC 3D 相机,请确保您的相机固件已更新到最新版本,以避免潜在的兼容性问题。 有关更多详细信息,请参阅奥比中光的发行说明