4、OpenCV-Python双目标定流程

[复制链接]
查看1206 | 回复0 | 2023-8-23 12:07:03 | 显示全部楼层 |阅读模式


1、双目标定

   双目标定的目标是获取左右目相机的内参矩阵、畸变向量、旋转矩阵清静移矩阵。
   除了Matlab的标定工具箱之外,OpenCV同样也实现了张友正标定法,而我们只须要调用相关的函数即可对相机举行标定。
双目相机标定步骤:


  • 检测棋盘格角点
  1. retL, cornersL = cv2.findChessboardCorners(ChessImaL,(self.width, self.height), cv2.CALIB_CB_ADAPTIVE_THRESH | cv2.CALIB_CB_FILTER_QUADS)  # 提取左图每一张图片的角点
  2. retR, cornersR = cv2.findChessboardCorners(ChessImaR,(self.width, self.height), cv2.CALIB_CB_ADAPTIVE_THRESH | cv2.CALIB_CB_FILTER_QUADS)  # 提取右图每一张图片的角点
复制代码


  • 对角点举行亚像素精致化
  1. criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
  2. cv2.cornerSubPix(ChessImaL, cornersL, (11, 11), (-1, -1), criteria)  # 亚像素精确化,对粗提取的角点进行精确化
  3. cv2.cornerSubPix(ChessImaR, cornersR, (11, 11), (-1, -1), criteria)  # 亚像素精确化,对粗提取的角点进行精确化
复制代码


  • 单目标定
  1. #   左侧相机单独标定
  2. retL, K1, D1, rvecsL, tvecsL = cv2.calibrateCamera(objpoints,imgpointsL,ChessImaL.shape[::-1], None, None)
  3. #   右侧相机单独标定
  4. retR, K2, D2, rvecsR, tvecsR = cv2.calibrateCamera(objpoints,imgpointsR,ChessImaR.shape[::-1], None, None)
复制代码


  • 双目标定
  1. criteria_stereo = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 1e-5)
  2. flags = 0
  3. flags |= cv2.CALIB_FIX_INTRINSIC
  4. # 内参、畸变系数、平移向量、旋转矩阵
  5. retS, K1, D1, K2, D2,  R, T, E, F = cv2.stereoCalibrate(objpoints,imgpointsL,imgpointsR,K1,D1,K2,D2,ChessImaR.shape[::-1], criteria_stereo,flags)
复制代码
我们要注意函数中的flags:


  • CV_CALIB_FIX_INTRINSIC:固定K和D矩阵。这是默认标志。如果你校准好你的相机,那就只求解

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则