OpenCV立体摄像机校准:支持混合相机模式(正常+鱼眼)?

31moq8wy  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(374)

在OpenCV API中,有cv::stereoCalibrate()cv::fisheye::stereoCalibrate()分别用于标定普通立体摄像机和鱼眼立体摄像机。对于这两个API,立体摄像机对使用相同的摄像机模型。换句话说,对于cv::stereoCalibrate(),两个立体摄像机必须使用normal camera model(6个径向失真系数+2个切向失真系数),对于cv::fisheye::stereoCalibrate(),两个立体摄像机必须使用鱼眼摄像机模型(4个鱼眼失真系数)。
有没有办法通过OpenCV校准一个使用普通相机模型而另一个使用鱼眼相机模型的立体相机对?

bbuxkriu

bbuxkriu1#

如果您觉得这个问题有帮助,OpenCV本身并不支持混合相机模型(例如,一个是普通相机,另一个是鱼眼相机)的立体校准(例如,通过stereoCalibrate() API)。
1.通过API cv::calibrateCamera()cv::fisheye::calibrate()校准每个摄像头的内部函数。
1.通过API cv::undistortPoints()cv::fisheye::undistortPoints()使用之前的内部函数对两台摄像机的所有图像点进行去扭曲。
1.通过API cv::stereoCalibrate()cv::fisheye::stereoCalibrate()(带有CALIB_FIX_INTRINSIC标志,仅用于计算外显函数),使用前一步中未失真后的图像点和两个摄像机的“完美内显函数”校准立体对的外显函数。具有完美内显函数的摄像机意味着其摄像机矩阵为[1 0 0; 0 1 0; 0 0 1]并且具有零失真(失真系数都是0)。

  • 注意:在此步骤中使用cv::stereoCalibrate()cv::fisheye::stereoCalibrate()并不重要,它们将产生相同的extrinsics。*

相关问题