双目相机标定可以只用一个相机移动,但是保证每次相对位置不变来完成吗
双目相机标定需要使用两个相机,因为需要获取两个不同视角的图像。使用一个相机无法获得双目视觉所需的两张不同视角的图像。因此,无法只用一个相机完成双目相机标定。另外,单个相机无法保证每次的相对位置完全相同,因为相机的位置可能会受到各种因素的影响而发生微小的变化,如温度、震动等。因此,只用一个相机进行双目相机标定不太行。
# calculate the internal parameters by cv2.fisheye.calibrate.
# Extrinsic parameter is useless
num = len(objpoints)
mtxfish = np.zeros((3, 3))
distfish = np.zeros((4, 1))
rvecs = [np.zeros((1, 1, 3), dtype=np.float32) for i in range(num)]
tvecs = [np.zeros((1, 1, 3), dtype=np.float32) for i in range(num)]
img = cv2.imread('calibration/RT.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img_size = gray.shape[::-1]
rms, mtxfish,distfish, rvecs, tvecs = cv2.fisheye.calibrate(objpoints, imgpoints, img_size, mtxfish,distfish, rvecs, tvecs, calib_flags, criteria)
基于cv2.fisheye.calibrate得到鱼眼相机的内参与图像匹配外参。这里,应该大部分人都会遇到ILL_Condition的问题,这就表示在这张图片上对应的objp和X并不能计算出鱼眼内参或者说计算出的内参与其他图片差别太大,总之就是这张图片不能用,把它删了就好了。这个过程会循环很多次,直到跑通,你就得到了fishmtx,fishdist。