Skip to content

Commit 37efd4f

Browse files
committed
Fix CharucoDetector returning only the first corner
1 parent df61d84 commit 37efd4f

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

src/OpenCvSharpExtern/aruco.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -733,10 +733,17 @@ CVAPI(ExceptionStatus) aruco_CharucoDetector_detectBoard(
733733
return cvTry([&] {
734734
cv::Mat charucoCorners_mat, charucoIds_mat;
735735
detector->detectBoard(InProxy(*image), charucoCorners_mat, charucoIds_mat, *markerCorners, *markerIds);
736-
for (int i = 0; i < charucoCorners_mat.rows; ++i)
736+
CV_Assert(charucoCorners_mat.total() == charucoIds_mat.total());
737+
if (!charucoCorners_mat.empty())
737738
{
738-
charucoCorners->push_back(charucoCorners_mat.at<cv::Point2f>(i, 0));
739-
charucoIds->push_back(charucoIds_mat.at<int>(i, 0));
739+
charucoCorners->insert(
740+
charucoCorners->end(),
741+
charucoCorners_mat.begin<cv::Point2f>(),
742+
charucoCorners_mat.end<cv::Point2f>());
743+
charucoIds->insert(
744+
charucoIds->end(),
745+
charucoIds_mat.begin<int>(),
746+
charucoIds_mat.end<int>());
740747
}
741748
});
742749
}

test/OpenCvSharp.Tests/aruco/ArucoTest.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,9 @@ public void CharucoDetector_DetectBoard()
736736
Assert.NotNull(charucoIds);
737737
Assert.NotNull(markerCorners);
738738
Assert.NotNull(markerIds);
739-
Assert.True(charucoIds.Length > 0, "Expected at least one charuco corner detected");
739+
var expectedCornerCount = (board.ChessboardSize.Width - 1) * (board.ChessboardSize.Height - 1);
740+
Assert.Equal(expectedCornerCount, charucoCorners.Length);
741+
Assert.Equal(expectedCornerCount, charucoIds.Length);
740742
Assert.Equal(charucoCorners.Length, charucoIds.Length);
741743
Assert.Equal(markerCorners.Length, markerIds.Length);
742744
}

0 commit comments

Comments
 (0)