首页 > 解决方案 > OpenCV 立体校准产生微小/零大小的 ROI

问题描述

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

标签: c++opencvcamera-calibration

解决方案


我找到了解决办法!事实证明,使用CALIB_FIX_K3 + CALIB_FIX_K4 + CALIB_FIX_K5flag 参数中的默认值会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) );

推荐阅读