Agregue una imagen a una transmisión de cámara en vivo usando OpenCV-Python

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *