# Preveďte obrázok do odtieňov sivej
šedá = cv2.cvtColor (obrázok, cv2.COLOR_BGR2GRAY)
# Získajte slovník Aruco na základe veľkosti značky a celkového počtu značiek
dictionary_key = getattr (cv2.aruco, f'DICT_{markerSize}X'
f'{markerSize}_{totalMarkers}')
aruco_dictionary = cv2.aruco.getPredefinedDictionary (kľúč_slovníka)
# Nastavte parametre detektora Aruco
aruco_params = cv2.aruco. DetectorParameters()
# Rozpoznajte značky Aruco na obrázku v odtieňoch šedej
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (sivá, aruco_dictionary,
parametre=aruco_params)
video_width, video_height):
frame_height, frame_width = video_frame.shape[:2]
ak len (aruco_markers[0]) != 0:
pre i, marker_corner v enumerate (aruco_markers[0]):
marker_corners = marker_corner.reshape((4, 2)).astype (np.int32)
# Nakreslite mnohouholník okolo rohov značky
cv2.polylines (video_frame, [marker_corners], Pravda, (0, 255, 0), 2)
# Pridajte ID značky ako text do ľavého horného rohu značky
cv2.putText (video_frame, str (aruco_markers[1][i]),
tuple (marker_corners[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)
# Nájdite homografickú maticu na mapovanie prekryvného obrázka na značku
homography_matrix, _ = cv2.findHomography(
np.array([[0, 0], [šírka_videa, 0], [video_width, video_height],
[0, video_height]], dtype="float32"), marker_corners)
# Ohnite prekryvný obrázok tak, aby bol zarovnaný so značkou pomocou homografickej matice
warped_image = cv2.warpPerspective (overlay_image, homography_matrix,
(frame_width, frame_height))
# Vytvorte masku, aby ste pokrivený obrázok aplikovali iba na oblasť značky
mask = np.zeros((výška_rámca, šírka_rámca), dtype="uint8")
cv2.fillConvexPoly (maska, marker_corners, (255, 255, 255), cv2.LINE_AA)
maskovaný_skrútený_obrázok = cv2.bitwise_and (skrútený_obrázok, deformovaný_obrázok,
maska=maska)
# Aplikujte inverznú masku na snímku videa
maskovaný_video_rámec = cv2.bitwise_and (video_frame, video_frame,
mask=cv2.bitwise_not (maska))
# Skombinujte maskovaný zdeformovaný obrázok a maskovaný rám videa
video_frame = cv2.add (masked_warped_image, masked_video_frame)
# Nastavte rozmery videa
výška_videa = 480
video_width = 640
# Otvorte snímanie videa
video_capture = cv2.VideoCapture(0)
# Načítajte a zmeňte veľkosť prekryvného obrázka
overlay_image = cv2.resize (overlay_image, (video_width, video_height))
zatiaľ čo video_capture.isOpened():
# Prečítajte si snímku zo záznamu videa
ret, video_frame = video_capture.read()
ak ret:
# Nájdite značky Aruco v rámčeku videa
aruco_markers = nájsťArucoMarkers (video_frame, totalMarkers=100)
# Prekryvný obrázok preložte na značky v rámčeku videa
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_height)
# Zobrazte snímku videa s prekrytím
cv2.imshow("Kamerový kanál", video_frame)
# Skontrolujte, či nie je stlačený kláves 'q', čím opustíte slučku
ak cv2.waitKey(1) & 0xFF == ord('q'):
prestávka