1
0
mirror of https://github.com/opencv/opencv_contrib.git synced 2025-10-18 08:44:11 +08:00

move april module

create aruco_utils.hpp

move Board, GridBoard, CharucoBoard to board.hpp/board.cpp

refactoring _getSingleMarkerObjectPoints()

refactoring _extractBits()

refactoring _findMarkerContours()

fix _copyVector2Output() in detectMarkers()

move testCharucoCornersCollinear() to board.hpp/board.cpp

move poseEstimate()/calibAruco() to aruco_calib_pose.hpp

reduce include files

move detectMarkers() to class ArucoDetector

move refineDetectedMarkers() to class ArucoDetector

add C API wrapper to detectMarkers(), refineDetectedMarkers()

update tests and samples to class API

add py tests: test_aruco_detector, test_aruco_detector_refine

refactoring, fix docs

add java tests: testArucoIssue3133, testArucoDetector

add readWriteParameter(), update readParameter()

implemented cv::Algorithm - read/write, added read/write to RefineParameters, added write to DetectorParameters

merge PatternPos/EstimateParameters after rebase

remove empty docstring for private function

fixes

fixes license
This commit is contained in:
AleksandrPanov
2022-04-29 02:07:23 +03:00
parent 9d0a451bee
commit 3a41fd6e68
39 changed files with 3346 additions and 3549 deletions

View File

@@ -85,5 +85,55 @@ class aruco_test(NewOpenCVTests):
self.assertEqual(dist, 0)
def test_aruco_detector(self):
aruco_params = cv.aruco.DetectorParameters_create()
aruco_dict = cv.aruco.Dictionary_get(cv.aruco.DICT_4X4_250)
aruco_detector = cv.aruco.ArucoDetector_create(aruco_dict, aruco_params)
id = 2
marker_size = 100
offset = 10
img_marker = cv.aruco.drawMarker(aruco_dict, id, marker_size, aruco_params.markerBorderBits)
img_marker = np.pad(img_marker, pad_width=offset, mode='constant', constant_values=255)
gold_corners = np.array([[offset, offset],[marker_size+offset-1.0,offset],
[marker_size+offset-1.0,marker_size+offset-1.0],
[offset, marker_size+offset-1.0]], dtype=np.float32)
expected_corners, expected_ids, expected_rejected = cv.aruco.detectMarkers(img_marker, aruco_dict,
parameters=aruco_params)
corners, ids, rejected = aruco_detector.detectMarkers(img_marker)
self.assertEqual(1, len(ids))
self.assertEqual(id, ids[0])
for i in range(0, len(ids)):
np.testing.assert_array_equal(expected_corners[i], corners[i])
np.testing.assert_array_equal(gold_corners, corners[i].reshape(4, 2))
def test_aruco_detector_refine(self):
aruco_params = cv.aruco.DetectorParameters_create()
aruco_dict = cv.aruco.Dictionary_get(cv.aruco.DICT_4X4_250)
aruco_detector = cv.aruco.ArucoDetector_create(aruco_dict, aruco_params)
board_size = (3, 4)
board = cv.aruco.GridBoard_create(board_size[0], board_size[1], 5.0, 1.0, aruco_dict)
board_image = board.draw((board_size[0]*50, board_size[1]*50), marginSize=10)
corners, ids, rejected = aruco_detector.detectMarkers(board_image)
self.assertEqual(board_size[0]*board_size[1], len(ids))
part_corners, part_ids, part_rejected = corners[:-1], ids[:-1], list(rejected)
part_rejected.append(corners[-1])
refine_corners, refine_ids, refine_rejected, recovered_ids = aruco_detector.refineDetectedMarkers(board_image, board, part_corners, part_ids, part_rejected)
refine_corners_c, _, _, _ = cv.aruco.refineDetectedMarkers(board_image, board, part_corners, part_ids, part_rejected)
self.assertEqual(board_size[0] * board_size[1], len(refine_ids))
self.assertEqual(1, len(recovered_ids))
for i in range(0, len(ids)):
np.testing.assert_array_equal(refine_corners_c[i], refine_corners[i])
#self.assertEqual(ids[-1], recovered_ids[0])
self.assertEqual(ids[-1], refine_ids[-1])
self.assertEqual((1, 4, 2), refine_corners[0].shape)
np.testing.assert_array_equal(corners, refine_corners)
if __name__ == '__main__':
NewOpenCVTests.bootstrap()