kesinliklebulArucoMarkers(resim, işaretleyiciBoyutu=6, toplamİşaretçiler=250):
# Görüntüyü gri tonlamaya dönüştürün
gri = cv2.cvtColor (resim, cv2.COLOR_BGR2GRAY)

# İşaretçi boyutuna ve toplam işaretçilere göre Aruco sözlüğünü edinin
sözlük_anahtarı = getattr (cv2.aruco, f'DICT_{işaretBoyutu}X'
F'{işaretBoyutu}_{toplamMarkerler}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (dictionary_key)

# Aruco dedektör parametrelerini ayarlayın
aruco_params = cv2.aruco. DedektörParametreleri()

# Gri tonlamalı görüntüde Aruco işaretlerini algıla
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (gri, aruco_dictionary,
parametreler=aruco_params)

kesinliklebindirmeImageOnMarkers(video_frame, aruco_markers, overlay_image,
video_genişliği, video_yüksekliği):
frame_height, frame_width = video_frame.shape[:2]

eğer uzunluk (aruco_markers[0]) != 0:
için ben, işaret_köşesi içinde numaralandır (aruco_markers[0]):
marker_corners = marker_corner.reshape((4, 2)).astype (np.int32)

# İşaret köşelerinin çevresine bir çokgen çizin
cv2.polylines (video_frame, [işaret_köşeleri], Doğru, (0, 255, 0), 2)

instagram viewer

# İşaretleyici kimliğini, işaretçinin sol üst köşesine metin olarak ekleyin
cv2.putText (video_frame, str (aruco_markers[1][Ben]),
demet (işaretleyici_köşeler[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Bindirme görüntüsünü işaretçiye eşlemek için homografi matrisini bulun
homoography_matrix, _ = cv2.findHomography(
np.dizi([[0, 0], [video_genişliği, 0], [video_genişliği, video_yüksekliği],
[0, video_height]], dtype="şamandıra32"), işaretleyici_köşeler)

# Homografi matrisini kullanarak bindirme görüntüsünü işaretleyiciyle hizalamak için çarpıtın
warped_image = cv2.warpPerspective (overlay_image, homoography_matrix,
(kare_genişliği, kare_yüksekliği))

# Çarpık görüntüyü yalnızca işaret alanına uygulamak için bir maske oluşturun
mask = np.zeros((frame_height, frame_width), dtype="uint8")
cv2.fillConvexPoly (maske, işaretleyici_köşeler, (255, 255, 255), cv2.LINE_AA)

masked_warped_image = cv2.bitwise_and (warped_image, warped_image,
maske=maske)

# Ters maskeyi video karesine uygulayın
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
mask=cv2.bitwise_not (maske))

# Maskelenmiş çarpık görüntüyü ve maskelenmiş video çerçevesini birleştirin
video_frame = cv2.add (masked_warped_image, masked_video_frame)

kesinliklesüreçVideoFeed(bindirme_resmi):
# Video beslemesinin boyutlarını ayarlayın
video_yüksekliği = 480
video_genişliği = 640

# Video yakalamayı açın
video_capture = cv2.VideoCapture(0)

# Bindirme görüntüsünü yükleyin ve yeniden boyutlandırın
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

sırasında video_capture.isOpened():
# Video çekiminden bir kare okuyun
ret, video_frame = video_capture.read()

eğer ret:
# Video karesinde Aruco işaretçilerini bulun
aruco_markers = findArucoMarkers (video_frame, totalMarkers=100)

# Bindirme görüntüsünü video çerçevesindeki işaretçilerin üzerine bindirin
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_genişliği,
video_yüksekliği)

# Video çerçevesini bindirmeli olarak görüntüleyin
cv2.imshow("Kamera Beslemesi", video çerçevesi)

# Döngüden çıkmak için 'q' tuşuna basıp basmadığını kontrol edin
eğer cv2.waitKey(1) & 0xFF == sıra('Q'):
kırmak