OpenCV相机标定与3D重建(64)用于迭代地优化图像点的位置函数undistortImagePoints()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算无畸变图像点的位置。
cv::undistortImagePoints这个函数用于迭代地优化图像点的位置,以补偿镜头畸变,并且允许指定终止条件来控制迭代过程。

函数原型


void cv::undistortImagePoints
(
	InputArray 	src,
	OutputArray 	dst,
	InputArray 	cameraMatrix,
	InputArray 	distCoeffs,
	TermCriteria 	= TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 5, 0.01) 
)	

参数

  • 参数src:观测到的点的位置,可以是 2xN 或 Nx2 的单通道矩阵,或者是 1xN 或 Nx1 的双通道矩阵(类型为 CV_32FC2 或 CV_64FC2)(或 vector)。
  • 参数dst:输出无畸变点的位置(1xN 或 Nx1 的双通道矩阵或 vector)。
  • 参数cameraMatrix:相机矩阵 A = [ f x 0 c x 0 f y c y 0 0 1 ] A = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} A= fx000fy0cxcy1
  • 参数distCoeffs:畸变系数。

代码示例


#include 
#include 
#include 

using namespace cv;
using namespace std;

int main()
{
    // 假设我们有一组畸变的图像点
    vector< Point2f > distortedPoints = { Point2f( 320, 240 ), Point2f( 330, 250 ) };

    // 相机内参矩阵和畸变系数(假设已经通过标定获得)
    Mat cameraMatrix = ( Mat_< double >( 3, 3 ) << 520.9, 0, 325.1, 0, 521.0, 249.7, 0, 0, 1 );

    Mat distCoeffs = ( Mat_< double >( 5, 1 ) << -0.28340811, 0.07395907, 0.00019359, 1.76187114e-05, 0.0 );

    // 创建输出点容器
    vector< Point2f > undistortedPoints;

    // 定义终止条件
    TermCriteria criteria( TermCriteria::COUNT + TermCriteria::EPS, 5, DBL_EPSILON );

    // 执行去畸变操作
    undistortImagePoints( distortedPoints, undistortedPoints, cameraMatrix, distCoeffs, criteria );

    // 输出结果
    for ( size_t i = 0; i < undistortedPoints.size(); ++i )
    {
        cout << "Point " << i + 1 << ": (" << undistortedPoints[ i ].x << ", " << undistortedPoints[ i ].y << ")" << endl;
    }

    return 0;
}

运行结果

Point 1: (319.999, 239.999)
Point 2: (330, 250)

你可能感兴趣的:(OpenCV,opencv,人工智能)