diff --git a/ar_tag_pose/detector_board_charuco.py b/ar_tag_pose/detector_board_charuco.py index 467df76..87354ae 100644 --- a/ar_tag_pose/detector_board_charuco.py +++ b/ar_tag_pose/detector_board_charuco.py @@ -15,7 +15,7 @@ class BoardDetectorCharuco(BoardDetector): board: cv.aruco.CharucoBoard = None dict_type = None def __init__(self, name: str, dict_type: int, board_id: str, board_size: tuple[int, int]): - self.detector, self.board = factory(dict_type, board_size, ids=self.ids) + self.detector, self.board = factory(dict_type, board_size) self.dict_type = dict_type self.board_size = board_size self.detector, self.board = factory(dict_type, board_size) @@ -36,14 +36,16 @@ class BoardDetectorCharuco(BoardDetector): success = False obj_points = None img_points = None + corners, ids, _, _ = self.detector.detectBoard(image) - if corners is not None: - if len(ids) >= len(self.board.getIds()): - _obj_points, _img_points = self.board.matchImagePoints(corners, ids) - if len(_obj_points) > 0 and len(_img_points) > 0: - success = True - obj_points = _obj_points - img_points = _img_points + corners, ids = self.match_ids(corners, ids) + + if len(ids) >= len(self.board.getIds()): + _obj_points, _img_points = self.board.matchImagePoints(corners, ids) + if len(_obj_points) > 0 and len(_img_points) > 0: + success = True + obj_points = _obj_points + img_points = _img_points return success, obj_points, img_points @@ -54,9 +56,9 @@ class BoardDetectorCharuco(BoardDetector): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) charuco_corners, charuco_ids, marker_corners, marker_ids = self.detector.detectBoard(gray) + corners, ids = self.match_ids(charuco_corners, charuco_ids) - if charuco_corners is not None: - + if len(ids) > 0: # Draw marker box if draw_marker_box: cv.aruco.drawDetectedMarkers(image, marker_corners)