deffind ArucoMarkers(billede, markørStørrelse=6, totalMarkers=250):
# Konverter billedet til gråtoner
grå = cv2.cvtColor (billede, cv2.COLOR_BGR2GRAY)

# Få Aruco-ordbogen baseret på markørstørrelsen og det samlede antal markører
ordbogsnøgle = getattr (cv2.aruco, f'DICT_{markerSize}X'
f'{markerSize}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (ordbogsnøgle)

# Indstil Aruco-detektorparametrene
aruco_params = cv2.aruco. Detektorparametre()

# Opdag Aruco-markører i gråtonebilledet
markør_hjørner, markør_id, _ = cv2.aruco.detectMarkers (grå, aruco_ordbog,
parameters=aruco_params)

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

hvis len (aruco_markers[0]) != 0:
til i, markør_hjørne i enumerate (aruco_markers[0]):
markør_hjørner = markør_hjørne.omformning((4, 2)).astype (np.int32)

# Tegn en polygon rundt om markørhjørnerne
cv2.polylines (videoramme, [markørhjørner], Rigtigt, (0, 255, 0), 2)

instagram viewer

# Tilføj markør-id som tekst i øverste venstre hjørne af markøren
cv2.putText (video_frame, str (aruco_markers[1][jeg]),
tupel (markørhjørner[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Find homografimatricen for at kortlægge overlejringsbilledet på markøren
homography_matrix, _ = cv2.findHomography(
np.array([[0, 0], [video_width, 0], [video_width, video_height],
[0, video_height]], dtype="float32"), markør_hjørner)

# Fordrej overlejringsbilledet for at justere med markøren ved hjælp af homografimatrix
warped_image = cv2.warpPerspective (overlay_image, homography_matrix,
(frame_width, frame_height))

# Opret en maske for kun at anvende det skæve billede på markørområdet
maske = np.zeros((frame_height, frame_width), dtype="uint8")
cv2.fillConvexPoly (maske, markør_hjørner, (255, 255, 255), cv2.LINE_AA)

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

# Anvend den omvendte maske på videorammen
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
mask=cv2.bitwise_not (maske))

# Kombiner det maskerede skæve billede og maskerede videoramme
video_frame = cv2.add (masked_warped_image, masked_video_frame)

defprocessVideoFeed(overlay_image):
# Indstil dimensionerne for videofeedet
video_højde = 480
video_width = 640

# Åbn videooptagelsen
video_capture = cv2.VideoCapture(0)

# Indlæs og tilpas størrelsen på overlejringsbilledet
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

mens video_capture.isOpened():
# Læs en ramme fra videooptagelsen
ret, video_frame = video_capture.read()

hvis ret:
# Find Aruco-markører i videorammen
aruco_markers = findArucoMarkers (video_frame, totalMarkers=100)

# Læg overlejringsbilledet oven på markørerne i videorammen
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_højde)

# Vis videorammen med overlejring
cv2.imshow("Kamera Feed", video_frame)

# Kontroller, om der trykkes på 'q'-tasten for at forlade sløjfen
hvis cv2.waitKey(1) & 0xFF == ord('q'):
pause