Skip to content

Commit f6adb0b

Browse files
authored
Merge pull request #2105 from shimat/fix/issue-2104
Fix CharucoDetector returning only the first corner
2 parents df61d84 + 0cbaa6b commit f6adb0b

2 files changed

Lines changed: 17 additions & 8 deletions

File tree

src/OpenCvSharpExtern/aruco.h

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -731,13 +731,20 @@ CVAPI(ExceptionStatus) aruco_CharucoDetector_detectBoard(
731731
std::vector<int>* markerIds)
732732
{
733733
return cvTry([&] {
734-
cv::Mat charucoCorners_mat, charucoIds_mat;
735-
detector->detectBoard(InProxy(*image), charucoCorners_mat, charucoIds_mat, *markerCorners, *markerIds);
736-
for (int i = 0; i < charucoCorners_mat.rows; ++i)
737-
{
738-
charucoCorners->push_back(charucoCorners_mat.at<cv::Point2f>(i, 0));
739-
charucoIds->push_back(charucoIds_mat.at<int>(i, 0));
740-
}
734+
cv::Mat charucoCorners_mat, charucoIds_mat;
735+
detector->detectBoard(InProxy(*image), charucoCorners_mat, charucoIds_mat, *markerCorners, *markerIds);
736+
CV_Assert(charucoCorners_mat.total() == charucoIds_mat.total());
737+
if (!charucoCorners_mat.empty())
738+
{
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>());
747+
}
741748
});
742749
}
743750

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)