# 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)
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)
# 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)
# 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