1.标定过程 (棋盘格见文章末尾)
- 准备20-30张拍摄的标定板图像,以20张图片为例。
- 提取20张图片的的角点信息。
- 在上一步的基础上,提取亚像素点(精度更高的角点坐标)。
- 把找到的角点在图上画出来,显得更加直观。
- 相机标定计算,根据上面提取到的角点坐标信息和世界坐标系中的三维点进行计算。
- 对标定结果进行评价
- 查看标定效果——利用标定结果对棋盘图进行矫正 (两种方法)
2.python+opencv
这里选择python+opencv是因为使用方便,不用像c++那样一步步配置环境库。
注意:w h为棋盘格模板长边和短边规格(角点个数),根据自己的棋盘格设置
import cv2
import numpy as np
import glob
from numpy import array as matrix, arange
# 找棋盘格角点
# 阈值
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# w h分别是棋盘格模板长边和短边规格(角点个数)
w = 7
h = 5
# 世界坐标系中的棋盘格点,例如(0,0,0), (1,0,0), (2,0,0) ....,(8,5,0),去掉Z坐标,记为二维矩阵,认为在棋盘格这个平面上Z=0
objp = np.zeros((w * h, 3), np.float32) # 构造0矩阵,88行3列,用于存放角点的世界坐标
objp[:, :2] = np.mgrid[0:w, 0:h].T.reshape(-1, 2) # 三维网格坐标划分
# 储存棋盘格角点的世界坐标和图像坐标对
objpoints = [] # 在世界坐标系中的三维点
imgpoints = [] # 在图像平面的二维点
record = []
images = glob<