Интересно, что когда я обрезал изображение, чтобы сфокусироваться только на маркере ArUco, обнаружение сработало точно и определило его Идентификатор.
Как правильно определить маркер?
Пример изображения:

Мой код выглядит следующим образом:
import cv2
import numpy as np
parameters = cv2.aruco.DetectorParameters()
aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_5X5_100)
def detect_aruco_and_scale_factor(img, aruco_dict, parameters):
img2=img.copy()
corners, ids, _ = cv2.aruco.detectMarkers(img2, aruco_dict, parameters=parameters)
if corners:
int_corners = np.int0(corners)
aruco_perimeter = cv2.arcLength(corners[0], True)
pixel_cm_ratio = aruco_perimeter / 13.2
for i in range(len(ids)):
cv2.putText(img2, str(ids[0]), tuple(int_corners[0][0]), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 255, 0), 3, cv2.LINE_AA)
return pixel_cm_ratio
else:
return None
Подробнее здесь: https://stackoverflow.com/questions/786 ... -in-opencv