Charuco: fixed multidetection

This commit is contained in:
2025-11-30 20:03:56 +01:00
parent f73bcfeae6
commit 50bec56ea7
+12 -10
View File
@@ -15,7 +15,7 @@ class BoardDetectorCharuco(BoardDetector):
board: cv.aruco.CharucoBoard = None board: cv.aruco.CharucoBoard = None
dict_type = None dict_type = None
def __init__(self, name: str, dict_type: int, board_id: str, board_size: tuple[int, int]): 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.dict_type = dict_type
self.board_size = board_size self.board_size = board_size
self.detector, self.board = factory(dict_type, board_size) self.detector, self.board = factory(dict_type, board_size)
@@ -36,14 +36,16 @@ class BoardDetectorCharuco(BoardDetector):
success = False success = False
obj_points = None obj_points = None
img_points = None img_points = None
corners, ids, _, _ = self.detector.detectBoard(image) corners, ids, _, _ = self.detector.detectBoard(image)
if corners is not None: 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(ids) >= len(self.board.getIds()):
if len(_obj_points) > 0 and len(_img_points) > 0: _obj_points, _img_points = self.board.matchImagePoints(corners, ids)
success = True if len(_obj_points) > 0 and len(_img_points) > 0:
obj_points = _obj_points success = True
img_points = _img_points obj_points = _obj_points
img_points = _img_points
return success, obj_points, img_points return success, obj_points, img_points
@@ -54,9 +56,9 @@ class BoardDetectorCharuco(BoardDetector):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
charuco_corners, charuco_ids, marker_corners, marker_ids = self.detector.detectBoard(gray) 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 # Draw marker box
if draw_marker_box: if draw_marker_box:
cv.aruco.drawDetectedMarkers(image, marker_corners) cv.aruco.drawDetectedMarkers(image, marker_corners)