相机去畸变后标定用opencv实现
时间: 2023-06-13 22:04:50 浏览: 50
相机去畸变后的标定,需要使用opencv中的相机标定模块,具体步骤如下:
1. 采集一组已去畸变的棋盘格图像,并保存这些图像的路径。
2. 定义棋盘格的行列数和每个格子的尺寸。
3. 读入图像,提取棋盘格角点。
4. 使用cv2.calibrateCamera()函数进行相机标定,得到相机内参矩阵、畸变系数、旋转矩阵和平移向量。
代码示例:
```
import cv2
import numpy as np
#定义棋盘格的行列数和每个格子的尺寸
board_size = (9,6)
square_size = 0.025 #米
#读入棋盘格图像路径
images = []
for i in range(1,21):
filename = 'image'+str(i)+'.jpg'
images.append(cv2.imread(filename))
#提取棋盘格角点
objpoints = [] #3D空间点
imgpoints = [] #2D图像点
objp = np.zeros((board_size[0]*board_size[1],3), np.float32)
objp[:,:2] = np.mgrid[0:board_size[0],0:board_size[1]].T.reshape(-1,2)*square_size
for img in images:
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, board_size,None)
if ret == True:
objpoints.append(objp)
imgpoints.append(corners)
#进行相机标定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
print("相机内参矩阵:\n",mtx)
print("畸变系数:\n",dist)
```
这样就可以得到相机内参矩阵和畸变系数了。