1. 创建
import cv2 as cv
import numpy as np
dictionary = cv.aruco.getPredefinedDictionary(dict=cv.aruco.DICT_6X6_250)
img = cv.aruco.drawMarker(dictionary, id=23, sidePixels=200, borderBits=1)
print(img.shape)
cv.imshow("Aruco Marker", img)
cv.waitKey()

2. 检测
2.1 创建检测图像
img_detected = np.ones((800, 600), dtype=np.uint8) * 255
img_detected[50:100, 50:100] = cv.aruco.drawMarker(dictionary, id=23, sidePixels=50, borderBits=1)
img_detected[350:400, 350:400] = cv.aruco.drawMarker(dictionary, id=18, sidePixels=50, borderBits=1)
img_detected[450:500, 450:500] = cv.aruco.drawMarker(dictionary, id=33, sidePixels=50, borderBits=1)
cv.imshow("img_detected", img_detected)
cv.waitKey()

2.2 检测
corners, ids, rejectedImgPoints = cv.aruco.detectMarkers(image=img_detected,
dictionary=dictionary,
parameters=None)
img_color = cv.cvtColor(img_detected, cv.COLOR_GRAY2BGR)
cv.aruco.drawDetectedMarkers(img_color, corners, ids)
cv.imshow("DectectedMarker", img_color)
cv.waitKey()

3. 标志块位姿估计
camera_matrix = np.array([[532.79536562, 0, 342.4582516],
[0, 532.91928338, 233.90060514],
[0, 0, 1.]])
dist_coefs = np.array([-2.81086258e-01, 2.72581018e-02, 1.21665908e-03, -1.34204275e-04, 1.58514022e-01])
rvecs, tvecs, _objPoints = cv.aruco.estimatePoseSingleMarkers(corners, 0.05, camera_matrix, dist_coefs)
for i in range(len(rvecs)):
cv.aruco.drawAxis(img_color, camera_matrix, dist_coefs, rvecs[i], tvecs[i], 0.05)
cv.imshow("Pose Estimation", img_color)
cv.waitKey()
