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
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)