En este artículo, vamos a aprender cómo insertar una imagen en la transmisión de su cámara en vivo usando OpenCV en Python.
Implementación paso a paso
Paso 1: Importación de las bibliotecas
CV lee y almacena todas las imágenes como una array NumPy. Necesitamos la biblioteca NumPy para manipular la imagen y, como era de esperar, necesitamos el módulo cv2.
Python3
# importing libraries import cv2 import numpy as np
Paso 2: Obtenga la transmisión en vivo de las cámaras web
- El siguiente paso es obtener la transmisión en vivo desde nuestra cámara web o cualquier otra cámara conectada. Como saben, un video es una colección de imágenes. Entonces, lo que vamos a hacer es hacer que nuestras cámaras web alimenten cada milisegundo como una imagen y ponerlo en un ciclo while para convertirlo en un ciclo de diferentes imágenes que se muestran una tras otra para obtener nuestra transmisión de cámara web en vivo.
- Obviamente, esto no va a ser un ciclo sin fin, por lo que estamos configurando una clave para salir del ciclo.
- Lo que van a hacer estas dos líneas de código es esperar la tecla especificada y, si se presiona la tecla, saldrá del bucle.
Python3
# Setup camera cap = cv2.VideoCapture(0) # While loop while True: # Capture frame-by-frame ret, frame = cap.read() # Show the captured image cv2.imshow('WebCam', frame) # wait for the key and come out of the loop if cv2.waitKey(1) == ord('q'): break # Discussed below cap.release() cv2.destroyAllWindows()
Paso 3: Lee la imagen
El siguiente paso es leer la imagen y almacenarla en una variable para acceder a ella mediante cv2.imread y redimensionar la imagen.
Python3
# Read logo and resize logo = cv2.imread('image.png') size = 100 logo = cv2.resize(logo, (size, size))
Paso 4: crea una máscara en la transmisión en vivo
A continuación, debemos establecer un espacio para la imagen donde se colocará en la transmisión de la cámara web Enmascarando esa área para una colocación suave de la imagen.
Para eso, vamos a usar cv2.cvtColor (para saber más, visite cv2.cvtColor ) para convertir primero la imagen dada en una imagen en escala de grises, porque es fácil procesar la imagen en OpenCV si la imagen está en escala de grises, y enmascare el área limitando los píxeles en ese rango por cv2.THRESH_BINARY ( para obtener más información, visite cv2.THRESH_BINARY ) para crear un espacio para que aparezca la imagen.
Python3
# Create a mask of logo img2gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY) ret, mask = cv2.threshold(img2gray, 1, 255, cv2.THRESH_BINARY)
Ahora vamos a encontrar el ROI (rango de interés) donde se debe colocar la imagen y enmascarar el área e insertar la imagen en la transmisión en vivo.
Python3
# Region of Interest (ROI), where we want # to insert logo roi = frame[-size-10:-10, -size-10:-10] # Set an index of where the mask is roi[np.where(mask)] = 0 roi += logo
Paso 6: Muestre el video
Ahora es una buena práctica liberar la cámara web para otras fuentes después de usarla. Podemos hacerlo mediante cv2.release() y usar cv2.destroyAllWindows() después de salir del ciclo.
Python3
cv2.imshow('WebCam', frame) if cv2.waitKey(1) == ord('q'): break # When everything done, release the capture cap.release() cv2.destroyAllWindows()
Siguiendo estos sencillos pasos podemos insertar cualquier imagen o cualquier logo por este método.
Código completo
Python3
# importing the libraries import cv2 import numpy as np # Setup camera cap = cv2.VideoCapture(0) # Read logo and resize logo = cv2.imread('image.png') size = 100 logo = cv2.resize(logo, (size, size)) # Create a mask of logo img2gray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY) ret, mask = cv2.threshold(img2gray, 1, 255, cv2.THRESH_BINARY) while True: # Capture frame-by-frame ret, frame = cap.read() # Region of Image (ROI), where we want to insert logo roi = frame[-size-10:-10, -size-10:-10] # Set an index of where the mask is roi[np.where(mask)] = 0 roi += logo cv2.imshow('WebCam', frame) if cv2.waitKey(1) == ord('q'): break # When everything done, release the capture cap.release() cv2.destroyAllWindows()
Producción:
Publicación traducida automáticamente
Artículo escrito por shivapriya1726 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA