def cv_stereoCal(boardSize, pathl, pathr): filelistl = cbm.getFilelist(pathl) filelistr = cbm.getFilelist(pathr) # 获得角点坐标 imagePointsl, objectCornerls, imageSizel = cbm.findPoints( filelistl, boardSize) imagePointsr, objectCornerrs, imageSizer = cbm.findPoints( filelistr, boardSize) objectCorners = [] for i in range(len(filelistl)): objectCorners.append(objectCornerls) imagePointsl[i] = imagePointsl[i].reshape((-1, 2)) imagePointsr[i] = imagePointsr[i].reshape((-1, 2)) # 获得camera matrix cml, dcl, rvls, tvls = cbm.cv_calibrate(imagePointsl, objectCornerls, imageSizel) cmr, dcr, rvrs, tvrs = cbm.cv_calibrate(imagePointsr, objectCornerrs, imageSizer) # 进行stereoCal,获得R,T,E,F retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv.stereoCalibrate( objectCorners, imagePointsl, imagePointsr, cml, dcl, cmr, dcr, imageSizel, flags=cv.CALIB_FIX_INTRINSIC) #返回计算结果 return cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F, imageSizel
def singleCal(boardSize): if DEBUG==1: filelist = ccbm.getFilelist('./img/left') else: dirname = tkinter.filedialog.askdirectory(initialdir='./', title="请选择图片文件夹") filelist = ccbm.getFilelist(dirname) if (len(filelist) < 3): print("提供的图片数目过少,请至少保证有3张图片!") os._exit(-1) ccbm.main(boardSize,filelist)
def main(boardSize, pathl, pathr): leftMaps, rightMaps, Rl, Rr, Pl, Pr, Q = getMaps(boardSize, pathl, pathr) filelist1 = ccb.getFilelist(pathl) filelist2 = ccb.getFilelist(pathr) file1 = filelist1[int(len(filelist1) / 2)] file2 = filelist2[int(len(filelist2) / 2)] check(boardSize, leftMaps, rightMaps, file1, file2) if not os.path.exists('./result/'): os.mkdir('./result/') np.savetxt("./result/rectify.txt", (Rl, Rr, Pl, Pr, Q), '%s', ',', '\n')
def zhangCalibrateCamera(imagePoints, objectCorners): # 计算单应矩阵 H = homographys(imagePoints, objectCorners) # 计算V矩阵 V = getV(H) # 计算相机内参 cameraMatirx = getCameraMatrix(V) # 计算旋转、位移向量 RTvecs, rmat, tvecs = getRtvecs(H, cameraMatirx) # 计算旋转、位移向量 disCoeffs = getDisCoeffs(cameraMatirx, imagePoints, objectCorners, RTvecs) # 将位移矩阵转化为向量 rvecs = ramt2rvecs(rmat) return cameraMatirx, disCoeffs, rvecs, tvecs def main(boardSize, filelist): imagePoints, objectCorners, imageSize = ccb.findPoints(filelist, boardSize) cameraMatirx, disCoeffs, rvecs, tvecs = ccb.cv_calibrate( imagePoints, objectCorners, imageSize) zcameraMatirx, zdisCoeffs, zrvecs, ztvecs = zhangCalibrateCamera( imagePoints, objectCorners) ccb.save('./result/compare/opencv', cameraMatirx, disCoeffs, rvecs, tvecs) ccb.save('./result/compare/zhang', zcameraMatirx, zdisCoeffs, zrvecs, ztvecs) if __name__ == "__main__": filelist = ccb.getFilelist('../img/left') main((6, 9), filelist)
def singleCal(boardSize, path): filelist = cbm.getFilelist(path) imagePoints, objectCorners, imageSize = cbm.findPoints(filelist, boardSize) cameraMatirx, disCoeffs, rvecs, tvecs = cbm.cv_calibrate( imagePoints, objectCorners, imageSize) return cameraMatirx, disCoeffs, rvecs, tvecs