opencv进行相机标定
时间: 2023-06-30 09:13:53 浏览: 126
相机标定是指确定相机内部参数和外部参数的过程。OpenCV提供了一个函数cv2.calibrateCamera()来进行相机标定。下面是标定的步骤:
1. 准备标定板:使用一个已知大小的标定板,例如棋盘格。
2. 拍摄标定板照片:使用相机拍摄多张不同角度、不同位置的标定板照片。
3. 检测标定板角点:用OpenCV的函数cv2.findChessboardCorners()来检测每张照片上标定板的角点。
4. 标定相机:使用函数cv2.calibrateCamera()来计算相机的内部参数和外部参数。
5. 评估标定结果:使用函数cv2.calibrationMatrixValues()来评估相机标定结果的质量。
6. 纠正图像畸变:使用函数cv2.undistort()来纠正图像畸变。
例子代码如下:
```
import cv2
import numpy as np
# 准备标定板
objp = np.zeros((6*7, 3), np.float32)
objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2)
objpoints = [] # 存储标定板角点的3D坐标
imgpoints = [] # 存储标定板角点的2D坐标
# 拍摄标定板照片
images = glob.glob('calibration_images/*.jpg')
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, (7,6), None)
if ret == True:
objpoints.append(objp)
imgpoints.append(corners)
cv2.drawChessboardCorners(img, (7,6), corners, ret)
cv2.imshow('img', img)
cv2.waitKey(500)
# 标定相机
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
# 评估标定结果
h, w = img.shape[:2]
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w,h))
print(cv2.calibrationMatrixValues(mtx, (w,h), 1, 1))
# 纠正图像畸变
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)
cv2.imshow('undistorted', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文
相关推荐















