defnajděte ArucoMarkers(obrázek, velikost značky=6, totalMarkers=250):
# Převeďte obrázek do stupňů šedi
šedá = cv2.cvtColor (obrázek, cv2.COLOR_BGR2GRAY)

# Získejte slovník Aruco na základě velikosti značky a celkového počtu značek
dictionary_key = getattr (cv2.aruco, f'DICT_{markerSize}X'
F'{markerSize}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (dictionary_key)

# Nastavte parametry detektoru Aruco
aruco_params = cv2.aruco. DetectorParameters()

# Detekujte značky Aruco v obrázku ve stupních šedi
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (šedá, aruco_dictionary,
parametry=aruco_params)

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

-li len (aruco_markers[0]) != 0:
pro i, marker_corner v vyjmenovat (aruco_markers[0]):
marker_corners = marker_corner.reshape((4, 2)).astype (np.int32)

# Nakreslete mnohoúhelník kolem rohů značky
cv2.polylines (video_frame, [marker_corners], Skutečný, (0, 255, 0), 2)

instagram viewer

# Přidejte ID značky jako text do levého horního rohu značky
cv2.putText (video_frame, str (aruco_markers[1][i]),
n-tice (marker_corners[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Najděte homografickou matici pro mapování překryvného obrázku na značku
homography_matrix, _ = cv2.findHomography(
np.array([[0, 0], [video_width, 0], [video_width, video_height],
[0, video_height]], dtype="float32"), marker_corners)

# Pokřivte překryvný obrázek tak, aby byl zarovnán se značkou pomocí homogenní matice
warped_image = cv2.warpPerspective (overlay_image, homography_matrix,
(frame_width, frame_height))

# Vytvořte masku pro použití pokřiveného obrázku pouze na oblast značky
mask = np.zeros((výška_rámce, šířka_rámce), dtype="uint8")
cv2.fillConvexPoly (maska, marker_corners, (255, 255, 255), cv2.LINE_AA)

masked_warped_image = cv2.bitwise_and (pokřivený_obrazek, deformovaný_obrazek,
maska ​​= maska)

# Aplikujte inverzní masku na snímek videa
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
mask=cv2.bitwise_not (maska))

# Zkombinujte maskovaný pokřivený obrázek a maskovaný snímek videa
video_frame = cv2.add (masked_warped_image, masked_video_frame)

defprocesVideoFeed(překryvný_obrázek):
# Nastavte rozměry kanálu videa
výška_videa = 480
video_width = 640

# Otevřete záznam videa
video_capture = cv2.VideoCapture(0)

# Načtěte a změňte velikost překryvného obrázku
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

zatímco video_capture.isOpened():
# Přečtěte si snímek ze záznamu videa
ret, video_frame = video_capture.read()

-li ret:
# Najděte značky Aruco v rámečku videa
aruco_markers = najítArucoMarkers (video_frame, totalMarkers=100)

# Překryjte překryvný obrázek na značky v rámečku videa
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
výška_videa)

# Zobrazte snímek videa s překrytím
cv2.imshow("Kamerový kanál", video_frame)

# Zkontrolujte, zda není stisknuto tlačítko 'q' pro ukončení smyčky
-li cv2.waitKey(1) & 0xFF == ord('q'):
přestávka