相机标定opencv
时间: 2023-08-31 11:13:08 浏览: 47
相机标定是指确定相机的内部参数和外部参数的过程,以便将图像坐标与世界坐标之间建立准确的对应关系。在OpenCV中,可以使用cv2.calibrateCamera()函数进行相机标定。下面是一个简单的相机标定示例代码:
```python
import cv2
import numpy as np
# 定义棋盘格大小
chessboard_size = (9, 6)
# 准备棋盘格角点的世界坐标
object_points = np.zeros((chessboard_size[0] * chessboard_size[1], 3), np.float32)
object_points[:, :2] = np.mgrid[0:chessboard_size[0], 0:chessboard_size[1]].T.reshape(-1, 2)
# 存储棋盘格角点的图像坐标和世界坐标
image_points = []
object_points_list = []
# 遍历图像文件进行角点检测
for i in range(1, 21):
# 读取图像
img = cv2.imread(f'calibration_images/img{i}.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 查找棋盘格角点
ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)
if ret:
object_points_list.append(object_points)
image_points.append(corners)
# 绘制并显示角点
cv2.drawChessboardCorners(img, chessboard_size, corners, ret)
cv2.imshow(f'img{i}', img)
cv2.waitKey(500)
# 进行相机标定
ret, camera_matrix, dist_coeffs, rvecs, tvecs = cv2.calibrateCamera(
object_points_list, image_points, gray.shape[::-1], None, None
)
# 打印相机内参和畸变系数
print("相机内参数:")
print(camera_matrix)
print("畸变系数:")
print(dist_coeffs)
cv2.destroyAllWindows()
```
上述代码会遍历文件夹中的棋盘格图像,检测棋盘格角点,并根据检测到的角点进行相机标定。标定结果包括相机内参数(camera_matrix)和畸变系数(dist_coeffs)。