Charuco: fixed multidetection
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user