![]() |
OpenCV 4.12.0
开源计算机视觉
|
上一个教程: 使用奥比中光 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 才能使用相机
cv.VideoCapture(0, cv.CAP_OBSENSOR) 尝试打开第一个奥比中光深度传感器设备。 如果相机无法打开,程序将退出并显示错误消息。orbbec_cap.grab() 方法尝试抓取一帧。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() 释放相机资源。VideoCapture obsensorCapture(0, CAP_OBSENSOR) 尝试打开第一个奥比中光深度传感器设备。 如果相机无法打开,将显示一条错误消息,程序退出。obsensorCapture.get() 检索相机的内部参数,包括焦距 (fx, fy) 和主点 (cx, cy)。obsensorCapture.grab() 方法尝试抓取一帧。obsensorCapture.retrieve(image, CAP_OBSENSOR_BGR_IMAGE) 来检索 BGR 图像数据。 如果成功检索,则使用 imshow("BGR", image) 在窗口中显示 BGR 图像。obsensorCapture.retrieve(depthMap, CAP_OBSENSOR_DEPTH_MAP) 来检索深度图像数据。 如果成功检索,则对深度图像进行归一化并应用伪彩色图像,然后使用 imshow("DEPTH", adjDepthMap) 在窗口中显示结果。 检索到的深度值以毫米为单位,并被截断为 300 到 5000(毫米)之间的范围。 这个固定的范围可以解释为基于深度相机深度范围的截断,消除了深度图上的无效像素。alpha) 将其覆盖在 BGR 图像上。 叠加的图像使用 imshow("DepthToColor", image) 显示在窗口中。pollKey() 检测键盘事件。 如果按下键,循环将中断,程序结束。