OpenCV 立体校准产生微小/零大小的 ROI

问题描述 投票:0回答:2

我正在尝试使用 OpenCV 的现成的立体校准代码(使用所有默认参数并使用 Bouguet 算法)来校准我的立体相机,但是校正后的图像没有显示出良好的校准:它们被裁剪得太多,以至于这些图像仅由几个像素组成。我不确定我做了什么,因为我能够让这个校准脚本与不同的相机对一起工作...我使用 20 对图像进行校准并改变棋盘相对于棋盘的方向每张图像中的相机。任何建议将不胜感激!

c++ opencv camera-calibration
2个回答
2
投票

我找到了解决办法!事实证明,在

CALIB_FIX_K3 + CALIB_FIX_K4 + CALIB_FIX_K5
的标志参数中使用
cv::stereoCalibrate
的默认值导致了这个问题,只需删除它们就可以解决问题。为了清楚起见,这就是工作函数调用的样子:

double rms = stereoCalibrate(objectPoints, imagePoints[0], imagePoints[1],
                                 cameraMatrix[0], distCoeffs[0],
                                 cameraMatrix[1], distCoeffs[1],
                                 imageSize, R, T, E, F,
                                 CALIB_FIX_ASPECT_RATIO +
                                 CALIB_ZERO_TANGENT_DIST +
                                 CALIB_USE_INTRINSIC_GUESS +
                                 CALIB_SAME_FOCAL_LENGTH +
                                 CALIB_RATIONAL_MODEL,
                                 TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, 1e-5) );

0
投票

为stereoRectify 使用与stereoCalibrate 相同的标志似乎也很重要!如果我为 StereoCalibrate 指定标志,而只在 StereoRectify 中保留默认标志,则右侧图像的最终 ROI 始终为空。

© www.soinside.com 2019 - 2024. All rights reserved.