# 从无到有搭建双目视觉系统: 实战深度图生成全流程, 首次碰到双目视觉之际, 我被那看似简易的原理给惊到了——两个摄像头像人眼那般, 便可以算出物体距离。然而当真着手去实现的话, 却发觉从标定直至深度图生成到处存在状况。本文会带领你完整经历此流程, 躲开我踩过的那些陷阱区域。## 1. 双目视觉基本概念同环境筹备, 双目视觉的关键所在是视差测算。当两个摄像头从不一样角度观察同一个场景时, 物体在左右图像里的水平位置差异便是视差。物体距离越近,视差就越大。在这个看似简单的原理背后, 是需要精确的相机标定来支撑的, 同时还需要复杂的立体匹配算法来支撑。**环境准备清单**: 要求是3.8加以上版本推荐使用管理环境, 需求为4.5加以上版本包含模块, 需要NumPy 1.20加以上版本, 要有一对USB摄像头建议同型号,要有棋盘格标定板建议用A4纸打印。安装命令是: -- numpy 验证安装为: (cv2.) # 应显示4.5以上版本*常见问题*: 要是碰到SGBM算法不可用这种情况, 也许是编译的时候没有包含模块。建议卸载之后再重新安装--。它是双目视觉里, 最为关键, 同时也是最容易出现差错的环节, 那便是双目相机标定实战相机标定。倘若标定结果良好, 会使得后续步骤达成事半功倍的效果, 然而若标定不佳, 将会致使深度图全然无法使用。### 2.1 将使用标准规格推荐采用8x6内角点的棋盘格标定板去制作标定板以及进行数据采集工作, 在打印的时候一定要确保做到: 纸张是平整的不存在褶皱现象, 方格的尺寸要进行精确的测量建议边长设置为3cm, 要粘贴在硬质的平板之上同时保持刚性, 此为采集数据时所遵循的黄金法则: 左右相机对于拍摄工作要做到同步以进行可以使用cv2.(0)和cv2.(1), 标定板必须要出现在左右两边的图像之中, 要对整个视野范围进行覆盖包括上下左右倾斜的视觉范围内, 要拍摄15至20组不同姿态的图像, 要避免出现强光反射以及镜头眩光的情况, 示例采集代码如下: cv2.(0) cv2.(1)count True:ret1, .read()ret2, .read()cv2.(Left, )cv2.(Right, )key cv2.(1)if key ord(s): # 按s保存cv2.(fleft_{count}.jpg, )cv2.(f{count}.jpg, )count 1elif key 27: # ESC退出.().()### 2.2 对于标定的参数进行计算, 这个标定的过程需要进行相关核xin参与计算的参数有: 相机内用于计算相机相关几何关系的矩阵其关联着焦距以及主点坐标, 畸变的系数其中包含径向畸变和切向畸变这两种情况, 两台相机之间的旋转矩阵以及平移向量, 标定代码框架如下: (位置,点数量(7,6)): # 3D点 # 2D点# 生成标定板角点的理论坐标objp np.zeros((*,这个地方有3), np.类型)objp 是因为np.mgrid关系而设定的坐标情况。0:,0: