defetsi ArucoMarkers(image, markerSize=6, TotalMarkers=250):
# Muunna kuva harmaasävyiksi
harmaa = cv2.cvtColor (kuva, cv2.COLOR_BGR2GRAY)

# Hanki Aruco-sanakirja merkin koon ja kokonaismerkkien perusteella
dictionary_key = getattr (cv2.aruco, f'DICT_{markerSize}X'
f'{markerSize}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (sanakirjan_avain)

# Aseta Aruco-ilmaisimen parametrit
aruco_params = cv2.aruco. DetectorParameters()

# Tunnista Aruco-merkit harmaasävykuvassa
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (harmaa, aruco_dictionary,
parametrit=aruco_params)

defpäällekkäinImageOnMarkers(video_frame, aruco_markers, overlay_image,
video_width, video_height):
frame_height, frame_width = video_frame.shape[:2]

jos len (aruco_markers[0]) != 0:
varten minä, marker_corner sisään luetella (aruco_markers[0]):
marker_corners = marker_corner.reshape((4, 2)).astype (np.int32)

# Piirrä monikulmio merkin kulmien ympärille
cv2.polylines (videon_kehys, [marker_corners], Totta, (0, 255, 0), 2)

# Lisää merkin tunnus tekstinä merkin vasempaan yläkulmaan
cv2.putText (video_frame, str (aruco_markers[1][i]),
monikko (merkki_kulmat[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Etsi homografiamatriisi, jonka avulla voit yhdistää peittokuvan merkkiin
homography_matrix, _ = cv2.findHomography(
np.array([[0, 0], [videon_leveys, 0], [videon_leveys, videon_korkeus],
[0, video_height]], dtype="float32"), marker_corners)

# Väännä peittokuva tasaiseksi merkin kanssa homografiamatriisin avulla
warped_image = cv2.warpPerspective (overlay_image, homography_matrix,
(kehyksen_leveys, kehyksen_korkeus))

# Luo maski käyttääksesi vääntynyttä kuvaa vain merkkialueelle
mask = np.zeros((kehyksen_korkeus, kehyksen_leveys), dtype="uint8")
cv2.fillConvexPoly (maski, marker_corners, (255, 255, 255), cv2.LINE_AA)

masked_warped_image = cv2.bitwise_and (vääristynyt_kuva, vääntynyt_kuva,
maski = maski)

# Käytä käänteistä maskia videokehykseen
masked_video_frame = cv2.bitwise_and (videon_frame, video_frame,
mask=cv2.bitwise_not (mask))

# Yhdistä naamioitu vääntynyt kuva ja peitetty videokehys
video_frame = cv2.add (masked_warped_image, masked_video_frame)

defprocessVideoFeed(peittokuva):
# Aseta videosyötteen mitat
video_height = 480
video_width = 640

# Avaa videokaappaus
video_capture = cv2.VideoCapture(0)

# Lataa peittokuva ja muuta sen kokoa
overlay_image = cv2.resize (overlay_image, (videon_width, video_height))

sillä aikaa video_capture.isOpened():
# Lue kehys videokaappauksesta
ret, video_frame = video_capture.read()

jos ret:
# Etsi Aruco-merkit videokehyksestä
aruco_markers = findArucoMarkers (video_frame, totalMarkers=100)

# Aseta peittokuva videokehyksen merkkien päälle
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_height)

# Näytä videokehys peittokuvalla
cv2.imshow("Kameran syöte", video_frame)

# Tarkista 'q'-näppäimen painallus poistuaksesi silmukasta
jos cv2.waitKey(1) & 0xFF == järjestys('q'):
tauko