defkeresse meg az ArucoMarkereket(kép, markerSize=6, totalMarkers=250):
# Konvertálja a képet szürkeárnyalatossá
szürke = cv2.cvtColor (kép, cv2.COLOR_BGR2GRAY)

# Szerezd meg az Aruco szótárt a marker mérete és az összes jelölő alapján
dictionary_key = getattr (cv2.aruco, f'DICT_{markerSize}X'
f'{markerSize}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (szótár_kulcs)

# Állítsa be az Aruco detektor paramétereit
aruco_params = cv2.aruco. DetectorParameters()

# Az Aruco markerek észlelése a szürkeárnyalatos képen
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (szürke, aruco_szótár,
paraméterek=aruco_params)

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

ha len (aruco_markers[0]) != 0:
számára i, marker_corner ban ben felsorol (aruco_markers[0]):
marker_corners = marker_corner.reshape((4, 2)).astype (np.int32)

# Rajzolj egy sokszöget a marker sarkai köré
cv2.polylines (video_frame, [marker_corners], Igaz, (0, 255, 0), 2)

instagram viewer

# Adja hozzá a jelölőazonosítót szövegként a jelölő bal felső sarkában
cv2.putText (video_frame, str (aruco_markers[1][én]),
tuple (marker_corners[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Keresse meg a homográfiai mátrixot, hogy az átfedő képet a markerre leképezhesse
homográfia_mátrix, _ = cv2.findHomography(
np.array([[0, 0], [video_width, 0], [video_width, video_height],
[0, video_height]], dtype="float32"), marker_corners)

# A homográfiai mátrix segítségével hajlítsa meg a fedőképet, hogy igazodjon a markerhez
warped_image = cv2.warpPerspective (overlay_image, homographia_matrix,
(frame_width, frame_height))

# Hozzon létre egy maszkot, hogy az elvetemült képet csak a jelölőterületre alkalmazza
maszk = np.zeros((frame_height, frame_width), dtype="uint8")
cv2.fillConvexPoly (maszk, marker_corners, (255, 255, 255), cv2.LINE_AA)

masked_warped_image = cv2.bitwise_and (elvetemült_kép, elvetemült_kép,
maszk=maszk)

# Alkalmazza az inverz maszkot a videokockára
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
mask=cv2.bitwise_not (maszk))

# Kombinálja a maszkolt vetemedett képet és a maszkolt videókockát
video_frame = cv2.add (masked_warped_image, masked_video_frame)

defprocessVideoFeed(overlay_image):
# Állítsa be a videó feed méreteit
video_height = 480
video_width = 640

# Nyissa meg a videórögzítést
video_capture = cv2.VideoCapture(0)

# Töltse be és méretezze át a fedőképet
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

míg video_capture.isOpened():
# Olvasson be egy képkockát a videórögzítésből
ret, video_frame = video_capture.read()

ha ret:
# Keresse meg az Aruco markereket a videó keretben
aruco_markers = FindArucoMarkers (video_frame, totalMarkers=100)

# Rakja rá a fedőképet a jelölőkre a videókockában
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_height)

# Jelenítse meg a videokockát átfedéssel
cv2.imshow("Kamera hírcsatorna", video_frame)

# A ciklusból való kilépéshez ellenőrizze a 'q' gombot
ha cv2.waitKey(1) & 0xFF == ord('q'):
szünet