1. 单目摄像头标定基础与原理
在计算机视觉领域,摄像头标定是获取相机内参和畸变参数的关键步骤。无论是普通镜头还是广角/鱼眼镜头,准确的标定结果直接影响后续视觉任务的精度。
1.1 标定的核心目的
摄像头标定主要解决两个核心问题:
- 确定相机的内参矩阵(Intrinsic Matrix)
- 获取镜头的畸变系数(Distortion Coefficients)
内参矩阵描述了理想情况下相机如何将3D世界坐标转换为2D图像坐标,其标准形式为:
code复制[f_x 0 c_x]
[ 0 f_y c_y]
[ 0 0 1]
其中f_x和f_y是焦距(以像素为单位),c_x和c_y是主点坐标。
1.2 标定板的选择与使用
棋盘格是最常用的标定模式,因其角点检测算法成熟稳定。实际使用时需注意:
- 棋盘格尺寸(CheckerboardSize)应精确测量并转换为实际物理单位(毫米或厘米)
- 内角点数(Nx_cor, Ny_cor)指棋盘格内部交叉点的数量,而非黑白方格数
- 推荐使用高对比度的黑白棋盘格,避免反光材质
关键提示:棋盘格平面性误差应小于0.1mm,打印时建议使用激光打印机而非喷墨打印机,以保证边缘锐利。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 标定流程实现详解
2.1 环境准备与初始化
标定前需要准备:
python复制import cv2
import numpy as np
# 初始化摄像头
cam = 2 # 摄像头索引或RTSP流地址
cap = cv2.VideoCapture(cam)
设置标定参数:
python复制imgNums = 30 # 采集的标定图像数量
checker_size = 27 # 棋盘格实际尺寸(mm)
nx = 9 # 横向内角点数
ny = 6 # 纵向内角点数
2.2 角点检测与优化
角点检测是标定的核心步骤,OpenCV提供了完善的检测流程:
python复制# 定义角点优化标准
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,
checker_size, 0.0
