aruco

yonuyeung / 2023-07-15 / 原文

import cv2
import cv2.aruco as aruco

# 设置ArUco字典
aruco_dict = aruco.Dictionary_get(aruco.DICT_4X4_50)

# 设置ArUco参数
parameters = aruco.DetectorParameters_create()

# 打开视频捕捉
cap = cv2.VideoCapture(0)  # 如果要从文件中读取视频,请将参数更改为视频文件名

while True:
    # 读取视频帧
    ret, frame = cap.read()

    # 将图像转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 检测ArUco标记
    corners, ids, rejected = aruco.detectMarkers(gray, aruco_dict, parameters=parameters)

    # 在图像中绘制检测到的标记
    frame = aruco.drawDetectedMarkers(frame, corners, ids)

    # 如果检测到标记
    if ids is not None:
        # 遍历每个检测到的标记
        for i in range(len(ids)):
            # 获取标记ID
            marker_id = ids[i][0]

            # 在图像中心绘制标记ID
            x = int(corners[i][0][0][0])
            y = int(corners[i][0][0][1])
            cv2.putText(frame, str(marker_id), (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)

            # 输出标记ID
            print("Detected marker with ID:", marker_id)

    # 显示帧
    cv2.imshow('ArUco Marker Detection', frame)

    # 检查按键,如果按下'q'键则退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放视频捕捉和关闭窗口
cap.release()
cv2.destroyAllWindows()