- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
估计用于去畸变或校正的新相机内参矩阵。
cv::fisheye::estimateNewCameraMatrixForUndistortRectify 是 OpenCV 中用于鱼眼镜头畸变校正的一个函数。它的主要作用是计算一个新的相机内参矩阵,以便在去畸变和校正过程中使用。这个新的内参矩阵可以帮助保持图像的某些特性,如图像中心的位置。
函数原型
cpp
void cv::fisheye::estimateNewCameraMatrixForUndistortRectify
(
InputArray K,
InputArray D,
const Size & image_size,
InputArray R,
OutputArray P,
double balance = 0.0,
const Size & new_size = Size(),
double fov_scale = 1.0
)
参数
- 参数K: 相机内参矩阵 cameramatrixK。
- 参数image_size: 图像的尺寸。
- 参数D: 输入的畸变系数向量 (k1, k2, k3, k4)。
- 参数R: 物体空间中的校正变换:3x3 的 1 通道矩阵,或向量:3x1/1x3 的 1 通道或 1x1 的 3 通道。
- 参数P: 新的相机内参矩阵(3x3)或新的投影矩阵(3x4)。
- 参数balance: 设置新的焦距在最小焦距和最大焦距之间的范围。平衡因子在 [0, 1] 范围内。
- 参数new_size: 新的尺寸。
- 参数fov_scale: 新焦距的除数。
代码示例
cpp
#include <iostream>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/opencv.hpp>
int main()
{
// 示例内参矩阵 K
cv::Mat K = ( cv::Mat_< double >( 3, 3 ) << 458.654, 0, 367.215, 0, 457.296, 248.375, 0, 0, 1 );
// 示例畸变系数 D
cv::Mat D = ( cv::Mat_< double >( 1, 4 ) << 0.0695303, -0.160713, -0.00480225, 0.000911994 );
// 图像尺寸
cv::Size imageSize( 720, 576 );
// 校正变换 R
cv::Mat R = cv::Mat::eye( 3, 3, CV_64F ); // 单位矩阵作为示例
// 平衡因子
double balance = 0.5;
// 新的相机内参矩阵或新的投影矩阵
cv::Mat new_K;
// 有效像素区域
cv::Rect validPixROI;
// 调用 estimateNewCameraMatrixForUndistortRectify 函数
cv::fisheye::estimateNewCameraMatrixForUndistortRectify( K, D, imageSize, R, new_K, balance );
// 打印结果
std::cout << "New Camera Matrix:" << std::endl;
std::cout << new_K << std::endl;
return 0;
}
运行结果
bash
New Camera Matrix:
[368.3332007323949, 0, 371.1237173309401;
0, 367.2426259492368, 240.771358281485;
0, 0, 1]