1. 畸变矫正基础概念回顾
在计算机视觉和摄影测量领域,镜头畸变是影响图像几何精度的主要因素之一。当我们使用广角镜头或低质量镜头时,图像边缘会出现明显的桶形畸变或枕形畸变。这种非线性变形会导致特征点位置偏移,直接影响后续的相机标定、三维重建等任务的精度。
OpenCV提供了完整的畸变矫正工具链,其中undistortPoints()函数负责将带有畸变的图像坐标点转换为理想无畸变的坐标点。与undistort()函数直接处理整张图像不同,undistortPoints()专注于对离散点集的精确矫正,特别适用于特征点匹配、SLAM等场景。
实际工程中发现,很多开发者直接使用默认参数调用undistortPoints(),却忽略了函数内部复杂的数学变换过程,导致在精密测量场景中出现毫米级误差。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. undistortPoints()函数接口解析
2.1 函数原型与参数说明
OpenCV中undistortPoints()主要有两个版本:
cpp复制// 版本一:基本形式
void undistortPoints(InputArray src, OutputArray dst,
InputArray cameraMatrix,
InputArray distCoeffs,
InputArray R = noArray(),
InputArray P = noArray());
// 版本二:支持亚像素精度
void undistortPoints(InputArray src, OutputArray dst,
InputArray cameraMatrix,
InputArray distCoeffs,
InputArray R, InputArray P,
TermCriteria criteria);
关键参数解析:
src:输入点集,N×1或1×N的2通道矩阵(浮点型)dst:输出点集,与src同尺寸cameraMatrix:3×3相机内参矩阵distCoeffs:畸变系数,通常为4、5或8元素向量R:可选的3×3矫正变换矩阵P:可选的3×3或3×4新相机矩阵criteria:迭代终止条件(仅版本二)
2.2 畸变模型数学表达
undistortPoints()处理的畸变模型包含径向畸变和切向畸变:
code复制x_corrected = x(1 + k1*r²
