defatrast ArucoMarkers(attēls, marķiera izmērs=6, totalMarkers=250):
# Pārvērtiet attēlu pelēktoņos
pelēks = cv2.cvtColor (attēls, cv2.COLOR_BGR2GRAY)

# Iegūstiet Aruco vārdnīcu, pamatojoties uz marķiera izmēru un kopējo marķieru skaitu
dictionary_key = getattr (cv2.aruco, f'DICT_{markerSize}X'
f'{markerSize}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (dictionary_key)

# Iestatiet Aruco detektora parametrus
aruco_params = cv2.aruco. Detektora parametri()

# Atklājiet Aruco marķierus pelēktoņu attēlā
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (pelēks, aruco_dictionary,
parametri=aruco_params)

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

ja len (aruco_markers[0]) != 0:
priekš es, marķieris_stūris iekšā uzskaitīt (aruco_markers[0]):
marker_corners = marķieris_stūris.reshape((4, 2)).astype (np.int32)

# Uzzīmējiet daudzstūri ap marķiera stūriem
cv2.polylines (video_frame, [marker_corners], Taisnība, (0, 255, 0), 2)

# Pievienojiet marķiera ID kā tekstu marķiera augšējā kreisajā stūrī
cv2.putText (video_frame, str (aruco_markers[1][i]),
kortežs (marķieris_stūri[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Atrodiet homogrāfijas matricu, lai kartētu pārklājuma attēlu uz marķiera
homogrāfijas_matrica, _ = cv2.findHomography(
np.array([[0, 0], [video_platums, 0], [video_platums, video_augstums],
[0, video_height]], dtype="float32"), marķieris_stūri)

# Izkropļot pārklājuma attēlu, lai tas izlīdzinātu ar marķieri, izmantojot homogrāfijas matricu
warped_image = cv2.warpPerspective (overlay_image, homography_matrix,
(rāmja_platums, rāmja_augstums))

# Izveidojiet masku, lai deformēto attēlu lietotu tikai marķiera apgabalā
maska ​​= np.zeros((kadra_augstums, kadra_platums), dtype="uint8")
cv2.fillConvexPoly (maska, marķiera_stūri, (255, 255, 255), cv2.LINE_AA)

masked_warped_image = cv2.bitwise_and (izkropļots_attēls, deformēts_attēls,
maska ​​= maska)

# Uzklājiet apgriezto masku video kadram
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
mask=cv2.bitwise_not (maska))

# Apvienojiet maskēto deformēto attēlu un maskēto video kadru
video_frame = cv2.add (masked_warped_image, masked_video_frame)

defprocessVideoFeed(overlay_image):
# Iestatiet video plūsmas izmērus
video_augstums = 480
video_platums = 640

# Atveriet video uzņemšanu
video_capture = cv2.VideoCapture(0)

# Ielādējiet pārklājuma attēlu un mainiet tā izmēru
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

kamēr video_capture.isOpened():
# Lasiet kadru no video uzņemšanas
ret, video_frame = video_capture.read()

ja ret:
# Atrodiet Aruco marķierus video kadrā
aruco_markers = findArucoMarkers (video_frame, totalMarkers=100)

# Pārklājiet pārklājuma attēlu uz marķieriem video kadrā
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_augstums)

# Parādiet video kadru ar pārklājumu
cv2.imshow("Kameras plūsma", video_frame)

# Pārbaudiet, vai nav nospiests taustiņš 'q', lai izietu no cilpas
ja cv2.waitKey(1) & 0xFF == pasūtījums('q'):
pārtraukums