From 9dde7790cfcd6999bbbb9e9ce2efed017f67c7dc Mon Sep 17 00:00:00 2001 From: tho Date: Mon, 27 Jan 2025 08:36:59 +0100 Subject: [PATCH] fix bug different marker ordering with findChessboardCornersSBWithMeta and CALIB_CB_LARGER flag --- modules/calib3d/src/chessboard.cpp | 3 ++- modules/calib3d/test/test_chesscorners.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/modules/calib3d/src/chessboard.cpp b/modules/calib3d/src/chessboard.cpp index bded912985..b4a8d9dd50 100644 --- a/modules/calib3d/src/chessboard.cpp +++ b/modules/calib3d/src/chessboard.cpp @@ -3720,10 +3720,11 @@ Chessboard::Board Chessboard::detectImpl(const Mat& gray,std::vector &f continue; } + iter_boards->normalizeOrientation(false); + if(iter_boards->getSize() == parameters.chessboard_size || iter_boards->getSize() == chessboard_size2) { - iter_boards->normalizeOrientation(false); if(iter_boards->getSize() != parameters.chessboard_size) { if(iter_boards->isCellBlack(0,0) == iter_boards->isCellBlack(0,int(iter_boards->colCount())-1)) diff --git a/modules/calib3d/test/test_chesscorners.cpp b/modules/calib3d/test/test_chesscorners.cpp index 3d13602780..f391e42e6a 100644 --- a/modules/calib3d/test/test_chesscorners.cpp +++ b/modules/calib3d/test/test_chesscorners.cpp @@ -849,5 +849,18 @@ TEST(Calib3d_RotatedCirclesPatternDetector, issue_24964) EXPECT_LE(error, precise_success_error_level); } +TEST(Calib3d_CornerOrdering, issue_26830) { + const cv::String dataDir = string(TS::ptr()->get_data_path()) + "cv/cameracalibration/"; + const cv::Mat image = cv::imread(dataDir + "checkerboard_marker_white.png"); + + std::vector cornersMinimumSizeMatchesPatternSize; + ASSERT_TRUE(cv::findChessboardCornersSB(image, Size(14, 9), cornersMinimumSizeMatchesPatternSize, CALIB_CB_MARKER | CALIB_CB_LARGER)); + + std::vector cornersMinimumSizeSmallerThanPatternSize; + ASSERT_TRUE(cv::findChessboardCornersSB(image, Size(4, 4), cornersMinimumSizeSmallerThanPatternSize, CALIB_CB_MARKER | CALIB_CB_LARGER)); + + ASSERT_EQ(cornersMinimumSizeMatchesPatternSize, cornersMinimumSizeSmallerThanPatternSize); +} + }} // namespace /* End of file. */