deffindArucoMarkers(slika, markerSize=6, totalMarkers=250):
# Pretvorite sliko v sivine
siva = cv2.cvtColor (slika, cv2.COLOR_BGR2GRAY)

# Pridobite slovar Aruco na podlagi velikosti markerjev in skupnega števila markerjev
slovarski_ključ = getattr (cv2.aruco, f'DICT_{markerSize}X'
f'{markerSize}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (dictionary_key)

# Nastavite parametre detektorja Aruco
aruco_params = cv2.aruco. DetectorParameters()

# Zaznaj oznake Aruco na sivinski sliki
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (siva, aruco_dictionary,
parametri=aruco_params)

defsuperimposeImageOnMarkers(video_frame, aruco_markers, overlay_image,
video_width, video_height):
višina_okvira, širina_okvira = video_okvir.oblika[:2]

če len (aruco_markers[0]) != 0:
za i, marker_corner v naštej (aruco_markers[0]):
marker_corners = marker_corner.reshape((4, 2)).astype (np.int32)

# Narišite mnogokotnik okoli vogalov markerjev
cv2.polylines (video_frame, [marker_corners], Prav, (0, 255, 0), 2)

instagram viewer

# Dodajte ID markerja kot besedilo v zgornjem levem kotu markerja
cv2.putText (video_frame, str (aruco_markers[1][jaz]),
tuple (marker_corners[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Poiščite homografsko matriko za preslikavo prekrivne slike na marker
homography_matrix, _ = cv2.findHomography(
np.array([[0, 0], [širina_videoposnetka, 0], [širina_videoposnetka, višina_videoposnetka],
[0, video_height]], dtype="float32"), marker_corners)

# Ukrivite prekrivno sliko, da se poravna z markerjem z uporabo homografske matrike
izkrivljena_slika = cv2.warpPerspective (prekrivna_slika, homografska_matrika,
(width_frame_width, frame_height))

# Ustvarite masko, da uporabite izkrivljeno sliko samo na območju označevalca
maska ​​= np.zeros((višina_okvira, širina_okvira), dtip="uint8")
cv2.fillConvexPoly (maska, marker_corners, (255, 255, 255), cv2.LINE_AA)

maskirana_izkrivljena_slika = cv2.bitno_in (izkrivljena_slika, izkrivljena_slika,
maska=maska)

# Uporabite inverzno masko na video okvir
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
maska=cv2.bitwise_not (maska))

# Združite maskirano izkrivljeno sliko in maskiran video okvir
video_frame = cv2.add (masked_warped_image, masked_video_frame)

defprocesVideoFeed(prekrivna_slika):
# Nastavite dimenzije video vira
video_height = 480
video_width = 640

# Odprite zajem videa
video_capture = cv2.VideoCapture(0)

# Naložite in spremenite velikost prekrivne slike
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

medtem video_capture.isOpened():
# Preberi okvir iz posnetka videa
ret, video_frame = video_capture.read()

če ret:
# Poiščite oznake Aruco v video okvirju
aruco_markers = findArucoMarkers (video_frame, totalMarkers=100)

# Prekrivno sliko prekrijte z oznakami v video okvirju
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_height)

# Prikažite video okvir s prekrivanjem
cv2.imshow("Vir kamere", video_okvir)

# Preverite pritisk tipke 'q' za izhod iz zanke
če cv2.waitKey(1) & 0xFF == red('q'):
odmor