gpt4 book ai didi

c++ - opencv立体标定结果

转载 作者:搜寻专家 更新时间:2023-10-31 02:11:08 25 4
gpt4 key购买 nike

如果我有两个网络摄像头,标记为cam1 , cam2 .我想校准它们以获得它们之间的转换。

我用了cv::stereoCalibrate()校准。

在我从 cam1 得到转换后至 cam2 ,标记为R , T .我想检查校准结果的准确性。

所以我用了cam1cam2拍摄棋盘照片,标记为pic1 , pic2 .我得到了cam1 cv::solvePnP() 的外部参数.我画了cam1的世界坐标系 cv::projectPoints()pic1 .

然后,我认为 cam2的旋转矩阵= cam1的旋转矩阵 * R .还有cam2的翻译矩阵= cam1的翻译矩阵 + T .

我计算了 cam2的外参按上面的思路。并且还得出了cam2的世界坐标系 cv::projectPoints()pic2 .

但是 pic2的原点位置不对。

这是我使用的部分代码。

void check_res(const vector<string> &imgs_nm,const Mat &R,const Mat &T,const Mat &cam_c,const Mat &cam_h,const Mat &dist_c,const Mat &dist_h)
{
int imgs_cnt=imgs_nm.size()/2;
vector<Point3f> obj_pts;
for(int i=0;i<boardDimensions.height;i++)
for(int j=0;j<boardDimensions.width;j++)
obj_pts.push_back(Point3f(i*CHESS_LEN,j*CHESS_LEN,0.f));
for(int i=0;i<imgs_cnt;i++)
{
vector<Point2f> c_cners,h_cners;
Mat imgc_gray,imgh_gray;
Mat imgc=imread(imgs_nm[i*2],1);
Mat imgc_rz=imgc.clone();

bool c_found,h_found;
c_found=HasChessBoard(imgc_rz,imgc_gray,c_cners);
if(c_found)
cv::cornerSubPix(imgc_gray, c_cners, cv::Size(11, 11), cv::Size(-1, -1),cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
Mat imgh=imread(imgs_nm[i*2+1],1);
h_found=HasChessBoard(imgh,imgh_gray,h_cners);
if(h_found)
cv::cornerSubPix(imgh_gray, h_cners, cv::Size(11, 11), cv::Size(-1, -1),cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
Mat rvec_c,rvec_h,tvec_c,tvec_h;
cv::solvePnP(obj_pts,c_cners,cam_c,dist_c,rvec_c,tvec_c);
cv::solvePnP(obj_pts,h_cners,cam_h,dist_h,rvec_h,tvec_h);
Mat rrvec_c,rrvec_h;
cv::Rodrigues(rvec_c,rrvec_c);
cv::Rodrigues(rvec_h,rrvec_h);
Mat r1=rrvec_c*R;
Mat t1=tvec_c+T;

Mat img1=imgh.clone();
draw_chess(imgh,rrvec_h,tvec_h,cam_h,dist_h);
imshow("pic1",imgh);
draw_chess(img1,r1,t1,cam_h,dist_h);
imshow("pic2",img1);


char resc=waitKey(0);
if(resc=='q')
exit(1);

}
}

下面是我使用opencv中的样本测试的结果.

enter image description here

我不认为这是校准精度低,因为我使用 opencv的样本和 cv::stereoCalibrate()返回小于 1 像素的 rms。

欢迎任何建议。谢谢!

最佳答案

公式是:

  • 相机 1 的姿势(在齐次矩阵中):

formula1

  • 从相机 1 到相机 2 的均匀变换:

formula2

  • 为相机 2 摆姿势:

formula3

关于c++ - opencv立体标定结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44045144/

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