deffindArucoMarkers(Bild, markerSize=6, totalMarkers=250):
# Konvertieren Sie das Bild in Graustufen
grey = cv2.cvtColor (Bild, cv2.COLOR_BGR2GRAY)

# Rufen Sie das Aruco-Wörterbuch basierend auf der Markergröße und der Gesamtzahl der Marker ab
dictionary_key = getattr (cv2.aruco, f'DICT_{markerSize}X'
F'{markerSize}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (dictionary_key)

# Stellen Sie die Parameter des Aruco-Detektors ein
aruco_params = cv2.aruco. DetectorParameters()

# Erkennen Sie Aruco-Marker im Graustufenbild
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (gray, aruco_dictionary,
Parameter=aruco_params)

defsuperimposeImageOnMarkers(video_frame, aruco_markers, overlay_image,
video_width, video_height):
frame_height, frame_width = video_frame.shape[:2]

Wenn len (aruco_markers[0]) != 0:
für ich, marker_corner In aufzählen (aruco_markers[0]):
marker_corners = marker_corner.reshape((4, 2)).astype (np.int32)

# Zeichnen Sie ein Polygon um die Markierungsecken
cv2.polylines (video_frame, [marker_corners], WAHR, (0, 255, 0), 2)

# Markierungs-ID als Text in der oberen linken Ecke der Markierung hinzufügen
cv2.putText (video_frame, str (aruco_markers[1][ich]),
Tupel (marker_corners[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Finden Sie die Homographiematrix, um das Overlay-Bild auf die Markierung abzubilden
homography_matrix, _ = cv2.findHomography(
np.array([[0, 0], [video_width, 0], [video_width, video_height],
[0, video_height]], dtype=„float32“), marker_corners)

# Verzerren Sie das Overlay-Bild mithilfe der Homographiematrix, um es an der Markierung auszurichten
warped_image = cv2.warpPerspective (overlay_image, homography_matrix,
(Frame_width, Frame_height))

# Erstellen Sie eine Maske, um das verzerrte Bild nur auf den Markierungsbereich anzuwenden
mask = np.zeros((frame_height, frame_width), dtype=„uint8“)
cv2.fillConvexPoly (mask, marker_corners, (255, 255, 255), cv2.LINE_AA)

masked_warped_image = cv2.bitwise_and (warped_image, warped_image,
Maske=Maske)

# Wenden Sie die inverse Maske auf das Videobild an
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
mask=cv2.bitwise_not (Maske))

# Kombinieren Sie das maskierte verzerrte Bild und das maskierte Videobild
video_frame = cv2.add (masked_warped_image, masked_video_frame)

defProcessVideoFeed(overlay_image):
# Legen Sie die Abmessungen des Video-Feeds fest
video_height = 480
video_width = 640

# Öffnen Sie die Videoaufnahme
video_capture = cv2.VideoCapture(0)

# Laden Sie das Overlay-Bild und ändern Sie seine Größe
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

während video_capture.isOpened():
# Lesen Sie einen Frame aus der Videoaufnahme
ret, video_frame = video_capture.read()

Wenn ret:
# Finden Sie Aruco-Markierungen im Videobild
aruco_markers = findArucoMarkers (video_frame, totalMarkers=100)

# Überlagern Sie die Markierungen im Videobild mit dem Overlay-Bild
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_height)

# Zeigen Sie den Videorahmen mit Overlay an
cv2.imshow(„Kamera-Feed“, Videobild)

# Überprüfen Sie, ob die Taste „q“ gedrückt wird, um die Schleife zu verlassen
Wenn cv2.waitKey(1) & 0xFF == ord('Q'):
brechen