在OpenCV API中,有cv::stereoCalibrate()
和cv::fisheye::stereoCalibrate()
分别用于标定普通立体摄像机和鱼眼立体摄像机。对于这两个API,立体摄像机对使用相同的摄像机模型。换句话说,对于cv::stereoCalibrate()
,两个立体摄像机必须使用normal camera model(6个径向失真系数+2个切向失真系数),对于cv::fisheye::stereoCalibrate()
,两个立体摄像机必须使用鱼眼摄像机模型(4个鱼眼失真系数)。
有没有办法通过OpenCV校准一个使用普通相机模型而另一个使用鱼眼相机模型的立体相机对?
1条答案
按热度按时间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。*