Skip to content

Commit 6df7b11

Browse files
author
AleksandrPanov
committed
fixed bad shape of markers (1x4) in several cases and added tests
1 parent 5cc328d commit 6df7b11

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

modules/aruco/src/aruco.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1563,7 +1563,7 @@ void refineDetectedMarkers(InputArray _image, const Ptr<Board> &_board,
15631563

15641564
_detectedCorners.create((int)finalAcceptedCorners.size(), 1, CV_32FC2);
15651565
for(unsigned int i = 0; i < finalAcceptedCorners.size(); i++) {
1566-
_detectedCorners.create(4, 1, CV_32FC2, i, true);
1566+
_detectedCorners.create(1, 4, CV_32FC2, i, true);
15671567
for(int j = 0; j < 4; j++) {
15681568
_detectedCorners.getMat(i).ptr< Point2f >()[j] =
15691569
finalAcceptedCorners[i].ptr< Point2f >()[j];

modules/aruco/test/test_charucodetection.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,4 +677,38 @@ TEST(Charuco, testCharucoCornersCollinear_false)
677677
EXPECT_FALSE(result);
678678
}
679679

680+
TEST(Charuco, issue_14014)
681+
{
682+
Ptr<aruco::Dictionary> dico = aruco::getPredefinedDictionary(aruco::PREDEFINED_DICTIONARY_NAME(cv::aruco::DICT_7X7_250));
683+
Ptr<aruco::CharucoBoard> board = aruco::CharucoBoard::create(8, 5, 0.03455, 0.02164, dico);
684+
Ptr<aruco::DetectorParameters> detectorParams = aruco::DetectorParameters::create();
685+
detectorParams.get()->cornerRefinementMethod = aruco::CORNER_REFINE_SUBPIX;
686+
detectorParams.get()->cornerRefinementMinAccuracy = 0.01;
687+
688+
std::string testImagePath = cvtest::TS::ptr()->get_data_path() + "aruco/";
689+
Mat img = imread(testImagePath + "nonrecover.png");
690+
vector<vector<Point2f> > rejectedPoints;
691+
vector<Mat> corners;
692+
vector<int> ids;
693+
694+
aruco::detectMarkers(img, dico, corners, ids, detectorParams, rejectedPoints);
695+
ASSERT_FALSE(corners.empty());
696+
EXPECT_EQ(Size(4, 1), corners[0].size());
697+
aruco::refineDetectedMarkers(img, board, corners, ids, rejectedPoints);
698+
ASSERT_FALSE(corners.empty());
699+
EXPECT_EQ(Size(4, 1), corners[0].size());
700+
701+
rejectedPoints.clear();
702+
corners.clear();
703+
ids.clear();
704+
705+
img = imread(testImagePath + "recover.png");
706+
aruco::detectMarkers(img, dico, corners, ids, detectorParams, rejectedPoints);
707+
ASSERT_FALSE(corners.empty());
708+
EXPECT_EQ(Size(4, 1), corners[0].size());
709+
aruco::refineDetectedMarkers(img, board, corners, ids, rejectedPoints);
710+
ASSERT_FALSE(corners.empty());
711+
EXPECT_EQ(Size(4, 1), corners[0].size());
712+
}
713+
680714
}} // namespace

0 commit comments

Comments
 (0)