From bb402374986bffd37f9b427addb5aab1845a3ab6 Mon Sep 17 00:00:00 2001 From: Vincent Rabaud Date: Mon, 8 Jan 2024 14:57:57 +0100 Subject: [PATCH] Make aruco detector deterministic. --- modules/objdetect/src/aruco/aruco_detector.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/objdetect/src/aruco/aruco_detector.cpp b/modules/objdetect/src/aruco/aruco_detector.cpp index 031d4849b3..d5ddae8f1f 100644 --- a/modules/objdetect/src/aruco/aruco_detector.cpp +++ b/modules/objdetect/src/aruco/aruco_detector.cpp @@ -684,7 +684,7 @@ struct ArucoDetector::ArucoDetectorImpl { contours.clear(); // sort candidates from big to small - std::sort(candidateTree.begin(), candidateTree.end()); + std::stable_sort(candidateTree.begin(), candidateTree.end()); // group index for each candidate vector groupId(candidateTree.size(), -1); vector > groupedCandidates; @@ -728,11 +728,11 @@ struct ArucoDetector::ArucoDetectorImpl { for (vector& grouped : groupedCandidates) { if (detectorParams.detectInvertedMarker) // if detectInvertedMarker choose smallest contours - std::sort(grouped.begin(), grouped.end(), [](const size_t &a, const size_t &b) { + std::stable_sort(grouped.begin(), grouped.end(), [](const size_t &a, const size_t &b) { return a > b; }); else // if detectInvertedMarker==false choose largest contours - std::sort(grouped.begin(), grouped.end()); + std::stable_sort(grouped.begin(), grouped.end()); size_t currId = grouped[0]; isSelectedContours[currId] = true; for (size_t i = 1ull; i < grouped.size(); i++) {