【发布时间】:2014-04-22 08:06:07
【问题描述】:
我已经尝试过 OpenCV cvStereoCalibrate 函数来校准一对立体相机。它在校准具有相同分辨率的一对相机时工作正常。但是当我尝试校准一对分辨率非常不同的相机时(右图大约是左图的 10 倍)。我得到了很大的重投影错误,结果不是很有意义。
以下是我在程序中调用 cvStereoCalibrate 的部分代码:
rpErr = cvStereoCalibrate( &_objectPoints, &_imagePoints1,
&_imagePoints2, &_npoints,
&_M1, &_D1, &_M2, &_D2,
imageSize, &_R, &_T, &_E, &_F,
cvTermCriteria(CV_TERMCRIT_ITER+
CV_TERMCRIT_EPS, 100, 1e-5),
CV_CALIB_ZERO_TANGENT_DIST);
如果也试过了
rpErr = cvStereoCalibrate( &_objectPoints, &_imagePoints1,
&_imagePoints2, &_npoints,
&_M1, &_D1, &_M2, &_D2,
imageSize, &_R, &_T, &_E, &_F,
cvTermCriteria(CV_TERMCRIT_ITER+
CV_TERMCRIT_EPS, 100, 1e-5),
);
我没有改善结果。
有人遇到过类似的问题吗?有什么问题?
【问题讨论】:
-
尝试调整大图像的大小以与小图像具有相同的分辨率。请注意,在 stereoCalibrate 中,您传递的是一个图像大小,而不是两个,因此可以为两个图像使用相同的分辨率。
-
非常感谢您的回复。是的,我忽略了参数 imageSize。我的问题是这两个相机的纵横比不同。一个是 5184*3456 (3:2) 。另一种是1600*1200。如果我将较大的图像调整为与较小的图像相同的大小。我会扭曲图像的纵横比。然后事情变得有点复杂。
-
据我所知,opencv 不支持不同的图像纵横比。你可以在这里看到答案:stackoverflow.com/questions/22877869/…希望它有所帮助。
-
谢谢你,marol。该链接确实有帮助。请在下面查看我的答案。