1. 相机标定为什么从棋盘格开始刚接触计算机视觉时我对相机标定的理解还停留在给相机做体检的层面。直到第一次用棋盘格完成标定后才明白这个过程就像给相机配眼镜——通过精确测量相机的视力缺陷畸变参数和眼球结构内参矩阵让机器也能像人眼一样准确感知三维世界。棋盘格之所以成为标定神器主要因为三个特性规则性黑白方格交替的严格几何结构、高对比度角点检测算法最爱的明暗突变、平面性所有角点共面便于计算。我常用的标定板是9x6的内角点布局实际项目中这个尺寸在1米距离下既能保证角点清晰可见又不会因太小而降低检测精度。这里有个新手容易忽略的细节棋盘格的物理尺寸直接影响标定结果。有次我用A4纸打印的棋盘格做标定忘记标注实际边长导致后续三维测量全部出错。建议用游标卡尺实测棋盘格方格尺寸精确到0.1mm并在代码中正确定义squareSize参数。2. 准备标定数据的避坑指南2.1 拍摄标定图像的黄金法则拍过上百组标定图后我总结出三覆盖原则空间覆盖让棋盘格出现在画面中心、四角、边缘各区域角度覆盖包含棋盘格平放、倾斜、旋转等不同姿态焦距覆盖变焦镜头适用在不同变焦位置分别拍摄一组最近帮某无人机厂商做标定时发现他们前期拍的50张图全是在1米距离平视拍摄导致标定的畸变参数在俯仰角度下完全失效。后来改用无人机实际飞行时的典型视角重新采集重投影误差从3.2像素降到了0.8像素。2.2 角点检测的进阶技巧OpenCV的findChessboardCorners()虽然好用但在低对比度或强反光场景容易翻车。我的改进方案是# 预处理增强角点检测鲁棒性 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray cv2.GaussianBlur(gray, (5,5), 0) clahe cv2.createCLAHE(clipLimit2.0, tileGridSize(8,8)) gray clahe.apply(gray) ret, corners cv2.findChessboardCorners(gray, (9,6), None)对于特别挑战的场景可以试试自适应阈值法gray cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)3. calibrateCamera()的深度调参3.1 关键参数组合实战flags参数的不同组合会产生截然不同的标定效果。经过大量测试我整理出几个实用配置应用场景推荐flags组合效果说明普通镜头CALIB_FIX_ASPECT_RATIO固定宽高比更稳定鱼眼镜头CALIB_RATIONAL_MODEL支持高阶畸变模型已知近似焦距CALIB_USE_INTRINSIC_GUESS加速收敛工业测量CALIB_FIX_PRINCIPAL_POINT固定光学中心提高精度去年给某医疗内窥镜做标定时发现默认参数计算的畸变系数异常。后来加上CALIB_FIX_K3标志限制高阶径向畸变后标定结果才趋于合理。3.2 重投影误差的真相RMS误差值是个需要辩证看待的指标小于0.5像素理想情况0.5-1像素多数场景可接受大于1像素需要检查问题源曾遇到RMS仅0.3像素但实际效果差的情况后来发现是标定板摆放过于集中导致。建议用可视化重投影误差来定位问题图像for i in range(len(objectPoints)): imgPoints2, _ cv2.projectPoints(objectPoints[i], rvecs[i], tvecs[i], cameraMatrix, distCoeffs) error cv2.norm(imagePoints[i], imgPoints2, cv2.NORM_L2)/len(imgPoints2) print(fImage {i} error: {error:.2f} pixels)4. 标定结果验证与优化4.1 三维验证的骚操作除了常规的undistort校正测试我习惯用标定板做尺子来验证拍摄已知间距的两个棋盘格用solvePnP计算各自位姿通过tvecs差值计算实际距离# 计算两个标定板间的实际距离 distance np.linalg.norm(tvecs[0] - tvecs[1]) print(fMeasured distance: {distance:.2f}mm)某次标定工业相机时这个方法发现Z轴距离误差达8%最终排查出是棋盘格方格尺寸标注错误。4.2 参数优化的黑科技当标定结果不理想时可以尝试鲁棒优化法用RANSAC剔除异常图像flags | cv2.CALIB_USE_LU flags | cv2.CALIB_RECOMPUTE_EXTRINSIC多阶段优化先固定主点优化焦距再联合优化温度补偿对于热胀冷缩明显的金属标定板需记录环境温度最近在车载相机标定中发现早晨和下午的标定结果差异明显。后来在恒温车间操作并给标定板预热的方案解决了这个问题。