以下是Python中使用OpenCV进行相机标定的示例代码:

import numpy as np
import cv2
import glob

# 设置标定板的尺寸
board_size = (9, 6)

# 设置标定板的实际大小(单位:mm)
square_size = 25

# 生成标定板的世界坐标
objp = np.zeros((np.prod(board_size), 3), np.float32)
objp[:, :2] = np.mgrid[0:board_size[0], 0:board_size[1]].T.reshape(-1, 2)
objp *= square_size

# 存储世界坐标和图像坐标的数组
objpoints = []  # 世界坐标
imgpoints = []  # 图像坐标

# 获取标定板图像文件名列表
images = glob.glob('calibration/*.jpg')

# 循环处理每张标定板图像
for fname in images:
    img = cv2.imread(fname)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 查找标定板角点
    ret, corners = cv2.findChessboardCorners(gray, board_size, None)
    
    # 如果找到了角点,添加世界坐标和图像坐标到数组中
    if ret == True:
        objpoints.append(objp)
        imgpoints.append(corners)
        
        # 可视化角点
        cv2.drawChessboardCorners(img, board_size, corners, ret)
        cv2.imshow('img', img)
        cv2.waitKey(500)

cv2.destroyAllWindows()

# 执行相机标定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)

# 打印标定结果
print("Camera matrix:\n", mtx)
print("Distortion coefficients:\n", dist)

此代码假定所有标定板图像都存储在名为“calibration”的文件夹中,并且标定板的大小为9x6,每个方格的大小为25mm。在执行相机标定后,代码打印相机矩阵和畸变系数。


原文地址: https://www.cveoy.top/t/topic/qnm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录