Detección de un color específico (azul aquí) usando OpenCV con Python

El siguiente código en python usa la biblioteca OpenCV que se emplea para las técnicas de procesamiento de imágenes. El programa permite la detección de un color específico en un contenido de video de transmisión en vivo. Un video se compone de infinitos cuadros en diferentes instantes de tiempo. Detectaremos el color de cada cuadro uno por uno. 
El código solo se compilará en un entorno Linux. 
 

Asegúrese de que openCV esté instalado en su sistema antes de ejecutar el programa. 
Para instalacion: 

  • Ejecute el siguiente comando en su terminal para instalarlo desde el repositorio de Ubuntu o Debian.
sudo apt-get install libopencv-dev python-opencv
  • O Para descargar OpenCV desde el sitio oficial, ejecute el siguiente comando:
bash install-opencv.sh

en tu terminal. Escriba su contraseña de sudo y habrá instalado OpenCV. Esta operación puede tardar bastante debido a los paquetes a instalar y al proceso de compilación.

  • Para instalar numpy solo usa el comando: 
     
sudo pip install numpy

Python3

# Python program for Detection of a 
# specific color(blue here) using OpenCV with Python
import cv2
import numpy as np 
  
# Webcamera no 0 is used to capture the frames
cap = cv2.VideoCapture(0) 
  
# This drives the program into an infinite loop.
while(1):        
    # Captures the live stream frame-by-frame
    _, frame = cap.read() 
    # Converts images from BGR to HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
  
    # Here we are defining range of bluecolor in HSV
    # This creates a mask of blue coloured 
    # objects found in the frame.
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
  
    # The bitwise and of the frame and mask is done so 
    # that only the blue coloured objects are highlighted 
    # and stored in res
    res = cv2.bitwise_and(frame,frame, mask= mask)
    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
  
    # This displays the frame, mask 
    # and res which we created in 3 separate windows.
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break
  
# Destroys all of the HighGUI windows.
cv2.destroyAllWindows()
  
# release the captured frame
cap.release()

Explicación del código: 

  • Configuración de la cámara: para realizar operaciones en tiempo de ejecución, se utiliza la cámara web del dispositivo. Para capturar un video, necesitamos crear un objeto VideoCapture. Su argumento puede ser el índice del dispositivo o el nombre de un archivo de video. El índice del dispositivo es solo el número para especificar qué cámara. Normalmente se conectará una cámara, así que simplemente pasamos 0. Puede seleccionar la segunda cámara pasando 1 y así sucesivamente. Después de eso, puede capturar cuadro por cuadro. Pero al final, no olvides soltar la captura. Además, si alguien quiere aplicar esta técnica de detección de color en cualquier imagen, puede hacerlo con pequeñas modificaciones en el código que discutiré más adelante.
  • Captura de fotogramas: El bucle infinito se utiliza para que la cámara web capture los fotogramas en cada instancia y esté abierta durante todo el transcurso del programa. 
    Después de capturar la transmisión en vivo cuadro por cuadro, estamos convirtiendo cada cuadro en el espacio de color BGR (el predeterminado) al espacio de color HSV. Hay más de 150 métodos de conversión de espacio de color disponibles en OpenCV. Pero solo veremos dos que son los más utilizados, BGR a Gray y BGR a HSV. Para la conversión de color, usamos la función cv2.cvtColor(input_image, flag) donde flag determina el tipo de conversión. Para BGR a HSV, usamos la bandera cv2.COLOR_BGR2HSV. Ahora que sabemos cómo convertir imágenes BGR a HSV, podemos usar esto para extraer un objeto coloreado. En HSV, es más fácil representar un color que el espacio de color RGB. 
    Al especificar el rango, hemos especificado el rango de color azul. Mientras que puede ingresar a la gama de cualquier color que desee.
  • Técnica de enmascaramiento: la máscara consiste básicamente en crear una región específica de la imagen siguiendo ciertas reglas. Aquí estamos creando una máscara que forma parte de un objeto de color azul. Después de eso, he usado bitwise_and en la imagen de entrada y la imagen de umbral para que solo los objetos de color azul se resalten y almacenen en res. 
    Luego mostramos el marco, la resolución y la máscara en 3 ventanas separadas usando la función imshow.
  • Muestre el marco: como imshow() es una función de HighGui, se requiere llamar a waitKey regularmente para procesar su ciclo de eventos. 
    La función waitKey() espera un evento clave por un «retraso» (aquí, 5 milisegundos). Si no llama a waitKey, HighGui no puede procesar eventos de Windows como redibujar, cambiar el tamaño, ingresar eventos, etc. Así que simplemente llámelo, incluso con un retraso de 1 ms.
  • Resumiendo el proceso
    1. Toma cada cuadro del video.
    2. Convierta cada cuadro de espacio de color BGR a HSV.
    3. Umbral de la imagen HSV para una gama de color azul.

Este artículo es una contribución de Pratima Upadhyay . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *