OpenCV 4.11.0
开源计算机视觉库
|
上一篇教程: 使用Orbbec Astra 3D摄像头
下一篇教程: 使用Creative Senz3D和其他兼容Intel RealSense SDK的深度传感器
原作者 | 陈金岳 |
兼容性 | OpenCV >= 4.10 |
本教程介绍基于UVC协议的Orbbec 3D摄像头。对于依赖OpenNI的较旧Orbbec 3D摄像头,请参考上一篇教程。
与使用基于OpenNI的Astra 3D摄像头(需要使用OpenNI2 SDK构建OpenCV)不同,访问Orbbec UVC 3D摄像头不需要安装Orbbec SDK。通过使用cv::VideoCapture
类,用户可以像使用USB摄像头一样获取3D摄像头的流数据。深度图和彩色图像的校准和对齐在内部完成。
要使用OpenCV操作3D摄像头,您可以参考入门指南安装OpenCV。
注意:从4.11版本开始,Mac OS用户需要使用标志-DOBSENSOR_USE_ORBBEC_SDK=ON
从源代码编译OpenCV才能使用摄像头
cv.VideoCapture(0, cv.CAP_OBSENSOR)
尝试打开第一个Orbbec深度传感器设备。如果相机打开失败,程序将退出并显示错误消息。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)
尝试打开第一个Orbbec深度传感器设备。如果相机打开失败,将显示错误消息,程序退出。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()
检测键盘事件。如果按下按键,循环中断,程序结束。Mac用户需要sudo权限才能执行代码。