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:
@@ -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()
|
||||
|
Reference in New Issue
Block a user