diff --git a/modules/objdetect/src/aruco/aruco_detector.cpp b/modules/objdetect/src/aruco/aruco_detector.cpp index a1b04c8181..00688c35f5 100644 --- a/modules/objdetect/src/aruco/aruco_detector.cpp +++ b/modules/objdetect/src/aruco/aruco_detector.cpp @@ -687,7 +687,6 @@ struct ArucoDetector::ArucoDetectorImpl { vector > groupedCandidates; vector isSelectedContours(candidateTree.size(), true); - size_t countSelectedContours = 0ull; for (size_t i = 0ull; i < candidateTree.size(); i++) { for (size_t j = i + 1ull; j < candidateTree.size(); j++) { float minDist = getAverageDistance(candidateTree[i].corners, candidateTree[j].corners); @@ -720,7 +719,12 @@ struct ArucoDetector::ArucoDetectorImpl { } } } - countSelectedContours += isSelectedContours[i]; + // group of one candidate + if(isSelectedContours[i]) { + isSelectedContours[i] = false; + groupId[i] = (int)groupedCandidates.size(); + groupedCandidates.push_back({i}); + } } for (vector& grouped : groupedCandidates) { @@ -743,8 +747,8 @@ struct ArucoDetector::ArucoDetectorImpl { } } - vector selectedCandidates(countSelectedContours + groupedCandidates.size()); - countSelectedContours = 0ull; + vector selectedCandidates(groupedCandidates.size()); + size_t countSelectedContours = 0ull; for (size_t i = 0ull; i < candidateTree.size(); i++) { if (isSelectedContours[i]) { selectedCandidates[countSelectedContours] = std::move(candidateTree[i]);