From ac9d0e0d0dc0af77785fc7c445c25340243cf08a Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Wed, 23 Jul 2025 17:24:44 +0300 Subject: [PATCH] Removed hack for calibration boards in samples and tutorials. --- samples/cpp/calibration.cpp | 15 +++++++++++++-- .../camera_calibration/camera_calibration.cpp | 9 +++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/samples/cpp/calibration.cpp b/samples/cpp/calibration.cpp index f8134368b2..ac80a06b59 100644 --- a/samples/cpp/calibration.cpp +++ b/samples/cpp/calibration.cpp @@ -178,8 +178,19 @@ static bool runCalibration( vector > imagePoints, vector > objectPoints(1); calcChessboardCorners(boardSize, squareSize, objectPoints[0], patternType); - int offset = patternType != CHARUCOBOARD ? boardSize.width - 1: boardSize.width - 2; - objectPoints[0][offset].x = objectPoints[0][0].x + grid_width; + // Board imperfectness correction introduced in PR #12772 + // The correction does not make sense for asymmetric and assymetric circles grids + if (patternType == CHESSBOARD) + { + int offset = boardSize.width - 1; + objectPoints[0][offset].x = objectPoints[0][0].x + grid_width; + } + else if (patternType == CHARUCOBOARD) + { + int offset = boardSize.width - 2; + objectPoints[0][offset].x = objectPoints[0][0].x + grid_width; + } + newObjPoints = objectPoints[0]; objectPoints.resize(imagePoints.size(),objectPoints[0]); 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 a80962b4c3..c051d60a7d 100644 --- a/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp +++ b/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp @@ -640,10 +640,15 @@ static bool runCalibration( Settings& s, Size& imageSize, Mat& cameraMatrix, Mat vector > objectPoints(1); calcBoardCornerPositions(s.boardSize, s.squareSize, objectPoints[0], s.calibrationPattern); - if (s.calibrationPattern == Settings::Pattern::CHARUCOBOARD) { + + // Board imperfectness correction introduced in PR #12772 + // The correction does not make sense for asymmetric and assymetric circles grids + if (s.calibrationPattern == Settings::Pattern::CHARUCOBOARD) + { objectPoints[0][s.boardSize.width - 2].x = objectPoints[0][0].x + grid_width; } - else { + else if (s.calibrationPattern != Settings::Pattern::CHESSBOARD) + { objectPoints[0][s.boardSize.width - 1].x = objectPoints[0][0].x + grid_width; } newObjPoints = objectPoints[0];