gpt4 book ai didi

c++ - 在 OpenCV CameraCalibration 函数中计算对象点

转载 作者:可可西里 更新时间:2023-11-01 18:29:27 24 4
gpt4 key购买 nike

我想使用 opencv Cameracalibration 函数 (calibrateCamera()) 来校准我的相机。
根据opencv document , 我的棋盘至少要拍 10 张。
但是当我想计算 objectPoints(这里是棋盘内部点的位置)时,我感到困惑:

如果原点是相机并且棋盘在移动,我很容易理解这个概念的理论基础,但很难计算objectPoints
第二种方法是固定棋盘并移动相机。但在这个解决方案中,我不明白如何在计算 objectPoints 或任何其他方式时应用相机与棋盘的距离对 opencv 相机校准函数说,这种距离和方向的变化。

如果你能帮助我解决我的问题,我将不胜感激。

最佳答案

您提到的第二种方法最受欢迎,因为它非常易于使用。

假设您有以下 (9,6) 棋盘,其中正方形的边长为 a:

opencv calibration chessboard
(来源:opencv.org)

然后,您只需按如下方式定义对象点:

// 3D coordinates of chessboard points
std::vector<cv::Point3f> objectPoints;
for(int y=0; y<6; ++y) {
for(int x=0; x<9; ++x)
objectPoints.push_back(cv::Point3f(x*a,y*a,0));
}
// One vector of chessboard points for each chessboard image
std::vector<std::vector<cv::Point3f>> arrayObjectPoints;
for(int n=0; n<number_images; ++n)
arrayObjectPoints.push_back(objectPoints);

基本上,由于您可以随意选择3D坐标系,因此您可以选择使用棋盘坐标系,这使得对象点非常容易定义。然后,calibrateCamera 函数将负责为每个图像估计一个 R,t(相对于所选坐标系的相对方向和平移),以及一个内在矩阵 K 和畸变系数 D,这些矩阵对所有图像都是通用的图片。

另外,注意对 2D 点使用相同的顺序。

关于c++ - 在 OpenCV CameraCalibration 函数中计算对象点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22338728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com