双目摄像头是由两个摄像头组成的组件,可用做距离测量和视觉检测。两个摄像头安装在同一平面上。两摄像头之间的距离叫做基线距离。双目摄像头长这样:
淘宝上有很便宜的一两百的,但是效果一般不太好。玩一玩是可以的。
将双目摄像头插在电脑上,用python简单几行驱动一下可以显示图像:
camera = cv2.VideoCapture(0)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
拍出来好像是一个广角的视野,那么你买的是鱼眼的摄像头,那么你需要进行校正才能有一个较好的效果。简单校正之后的效果如下:
那么如何进行校正呢:校正之前要做的一个工作是相机的标定,相机标定是通过拍摄很多组棋盘的照片,通过matlab的相机标定工具箱,或者是自己用python写标定程序,目的是为了得到相机的内参和外参。相机的内外参数通过是通过一系列的坐标转换得来的,具体的公式想了解的可以找一下相关的论文。opencv图像处理库有专门的校正函数即通得到内外参数后.可以通过undistort()函数一次性完成;也可以通过initUndistortRectifyMap()和remap()的组合来处理。
摄像头 | 参数 | 结果 |
左摄像头 | 焦距 | [ 327.1742, 0.1042, 332.9284] |
主点 | (342.7561, 238.7232) | |
畸变参数 | [-0.4136, 0.1504, 0.0, -0.0043, -0.0020] | |
右摄像头 | 焦距 | [ 342.5101, -0.2264, 309.3217] |
主点 | (327.1395, 252.5317) | |
畸变参数 | [-0.4038, 0.1240, 0.0, 0.0030,0.0044] | |
双目摄像头 | 旋转向量 | [0.9988, 0.0022, -0.0490] |
平移向量 | [-119.1594, 1.6745, 9.6760] |
相机的内外参数分别长这样,这是我测量出来的。到函数里面使用就行了
接下来就能进行距离测量距离测量使用的是一种简单的三角形原理。测量的代码首先使用stereo.compute(imgL, imgR)函数,输入左右视图,输出深度矩阵。使用cv2.Normalize()按照深度矩阵生产深度图。最后cv2.reprojectImageTo3D()将深度图扩展至三维空间中,返回的3d对象包含着3d点的rgb值和三维空间位置点两个数组。我们取出三维空间的数组,即目标点的空间坐标。
我们知道,要提高误差。对硬件部分的要求是十分高的。工业摄像头测量系统需要的摄像头要求有:高帧率、多接口、感光清晰、分辨率高、可编程控制、支持多系统开发。因此,选择Gauss3系列USB3.0工业相机模组作为本设计的视觉获取模块。此外,作为工业场景使用的摄像头。在温湿度、相机尺寸和相机重量方面应该要有一定的要求。下图是本摄像头的工业参数。通过比较,符合工业使用场景,能作为本设计的摄像头模组。