definitivamenteencontrarArucoMarcadores(imagen, tamaño del marcador=6, TotalMarkers=250):
# Convertir la imagen a escala de grises
gris = cv2.cvtColor (imagen, cv2.COLOR_BGR2GRAY)

# Obtenga el diccionario Aruco según el tamaño del marcador y el total de marcadores
clave_diccionario = getattr (cv2.aruco, f'DICT_{tamaño del marcador}X'
F'{tamaño del marcador}_{marcadores totales}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (dictionary_key)

# Establecer los parámetros del detector Aruco
aruco_params = cv2.aruco. Parámetros del detector()

# Detectar marcadores Aruco en la imagen en escala de grises
marker_corners, marker_ids, _ = cv2.aruco.detectMarkers (gris, aruco_dictionary,
parámetros=aruco_parámetros)

definitivamentesuperponerImagenEnMarcadores(video_frame, aruco_markers, overlay_image,
video_ancho, video_alto):
frame_height, frame_width = video_frame.shape[:2]

si len (aruco_marcadores[0]) != 0:
para yo, marcador_esquina en enumerar (aruco_markers[0]):
marcador_esquinas = marcador_esquina.reforma((4, 2)).astype (np.int32)

instagram viewer

# Dibuja un polígono alrededor de las esquinas del marcador
cv2.polylines (video_frame, [marker_corners], Verdadero, (0, 255, 0), 2)

# Agregar ID de marcador como texto en la esquina superior izquierda del marcador
cv2.putText (video_frame, str (aruco_markers[1][i]),
tupla (marcador_esquinas[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)

# Encuentre la matriz de homografía para mapear la imagen de superposición en el marcador
matriz_homografía, _ = cv2.findHomography(
np.matriz([[0, 0], [video_ancho, 0], [video_ancho, video_altura],
[0, video_height]], dtype="flotador32"), marcadores_esquinas)

# Deformar la imagen superpuesta para alinearla con el marcador usando la matriz de homografía
warped_image = cv2.warpPerspective (overlay_image, homography_matrix,
(ancho_marco, alto_marco))

# Cree una máscara para aplicar la imagen deformada solo en el área del marcador
máscara = np.zeros((frame_height, frame_width), dtype="uint8")
cv2.fillConvexPoly (máscara, marcadores_esquinas, (255, 255, 255), cv2.LINEA_AA)

masked_warped_image = cv2.bitwise_and (warped_image, warped_image,
máscara = máscara)

# Aplicar la máscara inversa al cuadro de video
masked_video_frame = cv2.bitwise_and (video_frame, video_frame,
máscara=cv2.bitwise_not (máscara))

# Combine la imagen deformada enmascarada y el cuadro de video enmascarado
video_frame = cv2.add (masked_warped_image, masked_video_frame)

definitivamenteprocesoVideoFeed(imagen_superpuesta):
# Establecer las dimensiones de la fuente de video
video_altura = 480
video_width = 640

# Abra la captura de video
video_capture = cv2.VideoCapture(0)

# Cargue y cambie el tamaño de la imagen de superposición
overlay_image = cv2.resize (overlay_image, (video_width, video_height))

mientras video_capture.isOpened():
# Lea un cuadro de la captura de video
ret, video_frame = video_capture.read()

si retirado:
# Encuentra marcadores de Aruco en el cuadro de video
aruco_markers = findArucoMarkers (video_frame, totalMarkers=100)

# Superponga la imagen superpuesta en los marcadores en el cuadro de video
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
overlay_image, video_width,
video_altura)

# Muestra el cuadro de video con superposición
cv2.imshow("Alimentación de cámara", fotograma de vídeo)

# Compruebe si presiona la tecla 'q' para salir del ciclo
si cv2.esperaClave(1) & 0xFF == orden('q'):
romper