gpt4 book ai didi

c++ - OpenCV标定麻烦

转载 作者:可可西里 更新时间:2023-11-01 17:41:50 26 4
gpt4 key购买 nike

我正在从事一个 OpenCV 项目,并且正在进行校准。我相信我已经正确地实现了代码;但是我得到了不同的相机矩阵值,有时变化很大。在重复 6 次显示校准图案 10 次之后,我得到了(为清楚起见截断了小数点):

[573, 0,  386;
0, 573, 312;
0, 0, 1]

[642, 0, 404;
0, 644, 288;
0, 0, 1]

[664, 0, 395;
0, 665, 272;
0, 0, 1]

[629, 0, 403;
0, 630, 288;
0, 0, 1]

[484, 0, 377;
0, 486, 307;
0, 0, 1]

[644, 0, 393;
0, 643, 289;
0, 0, 1]

这些值之间存在 Not Acceptable 差异。我需要相当准确地知道给定的参数是什么。造成这些较大误差的典型原因是什么?我如何评估给定矩阵的正确性?这似乎取决于我显示图案的各种距离和方向,但我无法理解该图案。

代码:

using namespace cv;
using namespace std;

int main(int, char**)
{
VideoCapture cap(1);
if(!cap.isOpened())
return -1;

cap.set(CV_CAP_PROP_FRAME_WIDTH,800);
cap.set(CV_CAP_PROP_FRAME_HEIGHT,600);
Mat edges;
Size size(9,17);

int counter = 10;

vector<Point2f> corners;
bool found;

vector<Point3f> chess = fr::ChessGen::getBoard(size,1,true);

vector<vector<Point3f> > objectPoints;
vector<vector<Point2f> > imagePoints;

Mat camera = Mat::eye(3,3,CV_64F);
Mat distortion = Mat::zeros(8, 1, CV_64F);
vector<Mat > rvecs;
vector<Mat > tvecs;

namedWindow("edges",1);
for(;;)
{
Mat frame;
cap >> frame;
cvtColor(frame, edges, CV_BGR2GRAY);

found = findCirclesGrid(edges,size,corners
,CALIB_CB_ASYMMETRIC_GRID
);
if(found) frame.convertTo(edges,-1,0.2);

drawChessboardCorners(edges,size,corners,found);

imshow("edges", edges);
if(found){
if(waitKey(200)>=0){
objectPoints.push_back(chess);
imagePoints.push_back(corners);
if(--counter<= 0)
break;
}
}
else waitKey(30);
}

calibrateCamera(objectPoints,imagePoints,Size(800,600),camera,distortion,rvecs,tvecs,0);

if(found) imwrite("/home/ryan/snapshot.png",edges);

cout << camera << endl;

return 0;
}

最佳答案

取决于相机/镜头和您需要的精度,但您可能需要 10 个以上的位置,并且需要覆盖更广的视角范围。

我从 800x600 假设这是一个带有简单广角镜头的网络摄像头,有很多失真。我会说你需要在 3-4 个不同的相机角度中的每个角度中对目标进行 6-8 个位置/旋转。您还需要确保目标和相机是固定的,并且在拍摄过程中不会移动。再次假设相机具有简单的自动增益,您应该确保目标光线充足,以便它使用快速快门速度和低增益。

openCV 使用的技术的一个问题是它需要查看目标上的所有角点/点,以便在解决方案中识别和使用一个框架 - 因此很难在图像的角点附近找到点.您应该检查校准中实际使用的图像数量的数据 - 它可能只是在 10 张图像中的少数图像上找到所有点,并将解决方案基于该子集。

关于c++ - OpenCV标定麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637759/

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