opencv 相机标定calibrateCamera()详解 C++
时间: 2025-07-05 15:08:55 浏览: 9
### OpenCV C++ 实现的 `calibrateCamera` 函数详解
#### 输入参数解释
- **objectPoints**: 对象空间中的三维点位置。这些点是在世界坐标系下的已知物理位置,通常是从棋盘格或其他类型的标定板上获取到的关键点[^1]。
- **imagePoints**: 图像平面上对应的二维点位置。对于每一个视角而言,这是通过检测角点或者其他特征匹配方法得到的实际像素坐标[^5]。
- **imageSize**: 提供用于校准过程的一幅或多幅图像尺寸大小(宽度×高度),单位为像素数。此信息有助于定义最终输出内参矩阵的有效区域范围[^3]。
- **cameraMatrix**: 输出参数之一,代表相机内部参数矩阵\[fx,0,cx;0,fy,cy\],其中\( fx \) 和 \( fy \) 是焦距系数;而 \( cx \), \( cy \) 则为中心偏移量。如果提供了初始猜测值,则可以通过设置标志位来利用它作为优化起点[^4]。
- **distCoeffs**: 另一个重要的输出项——畸变系数向量[k1,k2,p1,p2[,k3[,k4,k5,k6[,s1,s2,s3,s4[,τx,τy]]]]]。该数组描述了径向和切向两种主要形式的镜头失真效应程度。
#### 返回值与其他选项配置
- **retval (double)**: 表征整个处理流程成功与否的状态码。理想情况下应接近于零,意味着所有给定点都能很好地被拟合至单目几何模型下。此外还关联着所谓的“重投影误差”,即重建后的3D场景重新映射回原始图片时产生的平均偏差距离[^2]。
- **flags**: 用户可选标记用来指定某些特定行为或假设条件,比如是否固定主点位置(`CALIB_FIX_PRINCIPAL_POINT`)、强制使用鱼眼模型(`CALIB_RATIONAL_MODEL`)等。
- **criteria**: 终止准则结构体指针,控制迭代求解器何时停止工作。一般包含最大循环次数限制以及最小允许改进幅度两个方面的要求。
```cpp
// 示例代码片段展示如何调用 calibrateCamera()
std::vector<std::vector<cv::Point3f>> object_points;
std::vector<std::vector<cv::Point2f>> image_points;
cv::Size image_size(width, height);
cv::Mat camera_matrix = cv::Mat::eye(3, 3, CV_64F); // 初始化单位阵
cv::Mat distortion_coeffs;
double rms_error = cv::calibrateCamera(
object_points,
image_points,
image_size,
camera_matrix,
distortion_coeffs,
rvecs,
tvecs,
flags=cv::CALIB_ZERO_TANGENT_DIST + cv::CALIB_FIX_K3,
criteria=cv::TermCriteria(cv::TermCriteria::COUNT + cv::TermCriteria::EPS, 30, DBL_EPSILON)
);
if(rms_error >= 0){
std::cout << "Calibration succeeded with RMS error of " << rms_error << "." << std::endl;
} else {
std::cerr << "Failed to perform calibration." << std::endl;
}
```
阅读全文
相关推荐


















