@@ -564,9 +564,30 @@ TEST(CV_ArucoTutorial, can_find_singlemarkersoriginal)
564564 vector< int > ids;
565565 vector< vector< Point2f > > corners, rejected;
566566 Ptr<aruco::DetectorParameters> detectorParams = aruco::DetectorParameters::create ();
567+ const size_t N = 6ull ;
568+ // corners of ArUco markers with indices goldCornersIds
569+ const int goldCorners[N][8 ] = { {359 ,310 , 404 ,310 , 410 ,350 , 362 ,350 }, {427 ,255 , 469 ,256 , 477 ,289 , 434 ,288 },
570+ {233 ,273 , 190 ,273 , 196 ,241 , 237 ,241 }, {298 ,185 , 334 ,186 , 335 ,212 , 297 ,211 },
571+ {425 ,163 , 430 ,186 , 394 ,186 , 390 ,162 }, {195 ,155 , 230 ,155 , 227 ,178 , 190 ,178 } };
572+ const int goldCornersIds[N] = { 40 , 98 , 62 , 23 , 124 , 203 };
573+ map<int , const int *> mapGoldCorners;
574+ for (size_t i = 0 ; i < N; i++)
575+ mapGoldCorners[goldCornersIds[i]] = goldCorners[i];
567576
568577 aruco::detectMarkers (image, dictionary, corners, ids, detectorParams, rejected);
569- EXPECT_EQ (6 , (int )ids.size ());
578+
579+ ASSERT_EQ (N, ids.size ());
580+ for (size_t i = 0 ; i < N; i++)
581+ {
582+ int arucoId = ids[i];
583+ ASSERT_EQ (4ull , corners[i].size ());
584+ ASSERT_TRUE (mapGoldCorners.find (arucoId) != mapGoldCorners.end ());
585+ for (int j = 0 ; j < 4 ; j++)
586+ {
587+ EXPECT_NEAR (static_cast <float >(mapGoldCorners[arucoId][j * 2 ]), corners[i][j].x , 1 .f );
588+ EXPECT_NEAR (static_cast <float >(mapGoldCorners[arucoId][j * 2 + 1 ]), corners[i][j].y , 1 .f );
589+ }
590+ }
570591}
571592
572593TEST (CV_ArucoTutorial, can_find_gboriginal)
@@ -581,9 +602,45 @@ TEST(CV_ArucoTutorial, can_find_gboriginal)
581602 vector< int > ids;
582603 vector< vector< Point2f > > corners, rejected;
583604 Ptr<aruco::DetectorParameters> detectorParams = aruco::DetectorParameters::create ();
605+ const size_t N = 35ull ;
606+ // corners of ArUco markers with indices 0, 1, ..., 34
607+ const int goldCorners[N][8 ] = { {252 ,74 , 286 ,81 , 274 ,102 , 238 ,95 }, {295 ,82 , 330 ,89 , 319 ,111 , 282 ,104 },
608+ {338 ,91 , 375 ,99 , 365 ,121 , 327 ,113 }, {383 ,100 , 421 ,107 , 412 ,130 , 374 ,123 },
609+ {429 ,109 , 468 ,116 , 461 ,139 , 421 ,132 }, {235 ,100 , 270 ,108 , 257 ,130 , 220 ,122 },
610+ {279 ,109 , 316 ,117 , 304 ,140 , 266 ,133 }, {324 ,119 , 362 ,126 , 352 ,150 , 313 ,143 },
611+ {371 ,128 , 410 ,136 , 400 ,161 , 360 ,152 }, {418 ,139 , 459 ,145 , 451 ,170 , 410 ,163 },
612+ {216 ,128 , 253 ,136 , 239 ,161 , 200 ,152 }, {262 ,138 , 300 ,146 , 287 ,172 , 248 ,164 },
613+ {309 ,148 , 349 ,156 , 337 ,183 , 296 ,174 }, {358 ,158 , 398 ,167 , 388 ,194 , 346 ,185 },
614+ {407 ,169 , 449 ,176 , 440 ,205 , 397 ,196 }, {196 ,158 , 235 ,168 , 218 ,195 , 179 ,185 },
615+ {243 ,170 , 283 ,178 , 269 ,206 , 228 ,197 }, {293 ,180 , 334 ,190 , 321 ,218 , 279 ,209 },
616+ {343 ,192 , 385 ,200 , 374 ,230 , 330 ,220 }, {395 ,203 , 438 ,211 , 429 ,241 , 384 ,233 },
617+ {174 ,192 , 215 ,201 , 197 ,231 , 156 ,221 }, {223 ,204 , 265 ,213 , 249 ,244 , 207 ,234 },
618+ {275 ,215 , 317 ,225 , 303 ,257 , 259 ,246 }, {327 ,227 , 371 ,238 , 359 ,270 , 313 ,259 },
619+ {381 ,240 , 426 ,249 , 416 ,282 , 369 ,273 }, {151 ,228 , 193 ,238 , 173 ,271 , 130 ,260 },
620+ {202 ,241 , 245 ,251 , 228 ,285 , 183 ,274 }, {255 ,254 , 300 ,264 , 284 ,299 , 238 ,288 },
621+ {310 ,267 , 355 ,278 , 342 ,314 , 295 ,302 }, {366 ,281 , 413 ,290 , 402 ,327 , 353 ,317 },
622+ {125 ,267 , 168 ,278 , 147 ,314 , 102 ,303 }, {178 ,281 , 223 ,293 , 204 ,330 , 157 ,317 },
623+ {233 ,296 , 280 ,307 , 263 ,346 , 214 ,333 }, {291 ,310 , 338 ,322 , 323 ,363 , 274 ,349 },
624+ {349 ,325 , 399 ,336 , 386 ,378 , 335 ,366 } };
625+ map<int , const int *> mapGoldCorners;
626+ for (int i = 0 ; i < static_cast <int >(N); i++)
627+ mapGoldCorners[i] = goldCorners[i];
584628
585629 aruco::detectMarkers (image, dictionary, corners, ids, detectorParams, rejected);
586- EXPECT_EQ (35 , (int )ids.size ());
630+
631+
632+ ASSERT_EQ (N, ids.size ());
633+ for (size_t i = 0 ; i < N; i++)
634+ {
635+ int arucoId = ids[i];
636+ ASSERT_EQ (4ull , corners[i].size ());
637+ ASSERT_TRUE (mapGoldCorners.find (arucoId) != mapGoldCorners.end ());
638+ for (int j = 0 ; j < 4 ; j++)
639+ {
640+ EXPECT_NEAR (static_cast <float >(mapGoldCorners[arucoId][j*2 ]), corners[i][j].x , 1 .f );
641+ EXPECT_NEAR (static_cast <float >(mapGoldCorners[arucoId][j*2 +1 ]), corners[i][j].y , 1 .f );
642+ }
643+ }
587644}
588645
589646}} // namespace
0 commit comments