From 65b51e15380a45094f8c1ab0d35fd15ce864af8f Mon Sep 17 00:00:00 2001 From: Daniel Playfair Cal Date: Wed, 10 Mar 2021 02:09:08 +1100 Subject: [PATCH] Merge pull request #19690 from hedgepigdaniel:fix/calibration_fisheye * fix(samples/camera_calibration): set new camera matrix for fisheye * fix(camera_calibration): ignore inapplicable flags for fisheye --- .../calib3d/camera_calibration/camera_calibration.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp b/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp index a6f87f41e8..38961ec63e 100644 --- a/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp +++ b/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp @@ -391,7 +391,12 @@ int main(int argc, char* argv[]) { Mat temp = view.clone(); if (s.useFisheye) - cv::fisheye::undistortImage(temp, view, cameraMatrix, distCoeffs); + { + Mat newCamMat; + fisheye::estimateNewCameraMatrixForUndistortRectify(cameraMatrix, distCoeffs, imageSize, + Matx33d::eye(), newCamMat, 1); + cv::fisheye::undistortImage(temp, view, cameraMatrix, distCoeffs, newCamMat); + } else undistort(temp, view, cameraMatrix, distCoeffs); } @@ -519,7 +524,7 @@ static bool runCalibration( Settings& s, Size& imageSize, Mat& cameraMatrix, Mat { //! [fixed_aspect] cameraMatrix = Mat::eye(3, 3, CV_64F); - if( s.flag & CALIB_FIX_ASPECT_RATIO ) + if( !s.useFisheye && s.flag & CALIB_FIX_ASPECT_RATIO ) cameraMatrix.at(0,0) = s.aspectRatio; //! [fixed_aspect] if (s.useFisheye) { @@ -586,7 +591,7 @@ static void saveCameraParams( Settings& s, Size& imageSize, Mat& cameraMatrix, M fs << "board_height" << s.boardSize.height; fs << "square_size" << s.squareSize; - if( s.flag & CALIB_FIX_ASPECT_RATIO ) + if( !s.useFisheye && s.flag & CALIB_FIX_ASPECT_RATIO ) fs << "fix_aspect_ratio" << s.aspectRatio; if (s.flag)