相机标定
一、前提准备
1、伪硬件
名称 |
|
数量 |
标定板8×10 |
|
1 |
手机 |
|
1 |
待标定照片 |
|
12 |
支架 |
|
1 |
手机固定在支架上,调整标定板位置,对其从不同角度进行拍照,所拍摄照片为11张。保存到文件夹后对其进行依次命名:*.jpg(如:1.jpg)
2、软件
使用的编程语言:python
工具包:opencv
, numpy
, glob
二、寻找标定棋盘并进行标定
1、python + opencv
的方案
利用opencv
寻找棋盘,所用到的函数如下:
-
cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS
:设置寻找亚像素点的终止迭代规则,前者为在指定迭代次数后停止算法,后者为要求的精度,在相机标定时才用的最大迭代次数为30次,最大精度为0.001。
-
images = glob.glob(r'G:\biaoding\*.jpg')
:glob函数能够返回所有匹配到的文件路径列表,用来读取待标定的棋盘图像。
-
cv2.findChessboardCorners
:该函数用来找到棋盘,其返回值为角点,且会按一定顺序排列。
-
cv2.cornerSubPix
:在上述找到角点的前提下寻找亚像素点,目的是为了增强检测角点的精度。
-
cv2.drawChessboardCorners
:绘制找到的角点
-
retv, mtx, dist, rvecs, tvecs = cv2.calibrateCamera
:相机标定函数,经过以上的计算以及找角点后进行相机标定,返回值为相机矩阵,畸变系数,旋转以及变换向量。
2、具体实施
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| import cv2 import glob import numpy as np
criteria = (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30, 0.001)
objp = np.zeros((7 * 9, 3), np.float32) objp[:, :2] = np.mgrid[0:9, 0:7].T.reshape(-1, 2) obj_points = [] img_points = []
images = glob.glob(r'G:\biaoding\*.jpg') for fname in images: img = cv2.imread(fname) cv2.namedWindow('img', 0) cv2.resizeWindow('img', 600, 600) cv2.imshow('img',img) cv2.waitKey() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) size = gray.shape[::-1] retv, corners = cv2.findChessboardCorners(gray, (7, 9), None) print(retv) if retv: obj_points.append(objp) corners2 = cv2.cornerSubPix(gray, corners, (6, 6), (-1, -1), criteria) print(corners2) if [corners2]: img_points.append(corners2) else: img_points.append(corners) cv2.drawChessboardCorners(img, (7, 9), corners, retv) cv2.namedWindow('img', 0) cv2.resizeWindow('img', 600, 600) cv2.imshow('img', img) cv2.waitKey(20000)
|
待标定图像如下所示:
找到棋牌并进行标定后的图片如下图所示:
3、相机相关参数
相机矩阵Mtx:
1 2 3
| [[1.86761254e+04 0.00000000e+00 4.09207342e+02] [0.00000000e+00 1.77781655e+03 4.23180100e+02] [0.00000000e+00 0.00000000e+00 1.00000000e+00]]
|
畸变系数dist:
1 2
| dist: [[-0.05541607 -0.17312714 0.0776916 -0.0767596 0.07245637]]
|
外参旋转向量:
1 2 3
| [[ 2.10761526], [-0.5901612 ], [-2.10187724]]
|
外参平移向量:
1 2 3
| [[ 1.32373017], [16.72137644], [57.99935184]]
|