Trabajo en el laboratorio con espacios de color

OpenCVBeginner
Practicar Ahora

Introducción

Bienvenido a este tutorial sobre espacios de color en OpenCV-Python.

Un espacio de color es una forma de representar los canales de color en una imagen. Hay varios espacios de color diferentes, pero los tres más comunes son:

  • BGR (Azul, Verde, Rojo): El espacio de color predeterminado utilizado por OpenCV.
  • Gris: Una representación en escala de grises de la imagen.
  • HSV (Matiz, Saturación, Valor): Una representación en coordenadas cilíndricas de los colores.
    En este tutorial, nos centraremos en convertir imágenes entre los espacios de color BGR, Gris y HSV.

Utilice la función cv.cvtColor() para convertir y mostrar imágenes entre espacios de color

Para convertir imágenes entre espacios de color, utilizamos la función cv.cvtColor(). Primero, importemos las bibliotecas necesarias y leamos una imagen:

Abrir la consola de Python

Abra la consola de Python escribiendo el siguiente comando en la terminal.

python3

Utilice la función cv.imread() para leer la imagen image.jpg que preparamos en la carpeta predeterminada.

import cv2 as cv
import numpy as np

## Leer la imagen
image = cv.imread('image.jpg')

De BGR a Gris

Para convertir la imagen de BGR a Gris, utilice la bandera cv.COLOR_BGR2GRAY:

## Convertir la imagen a escala de grises
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

De BGR a HSV

Para convertir la imagen de BGR a HSV, utilice la bandera cv.COLOR_BGR2HSV:

## Utilizar el espacio de color HSV. El espacio de color HSV se utiliza principalmente para la detección de objetos
hsv_image = cv.cvtColor(image, cv.COLOR_BGR2HSV)

Mostrar las imágenes convertidas

Para mostrar la imagen original y las imágenes convertidas, utilice las funciones cv.imwrite():

## Guardar la imagen en el archivo especificado
cv.imwrite('image.jpg', image)
cv.imwrite('gray_image.jpg', gray_image)
cv.imwrite('hsv_image.jpg', hsv_image)

utilice la función cv.inRange() para extraer un objeto de un color específico de una imagen

Para extraer un objeto de un color específico de una imagen, puedes utilizar la función cv.inRange(). En este ejemplo, extraeremos un objeto azul de la imagen.

Definir el rango de color

Primero, defina los límites inferior y superior del color azul en el espacio de color HSV:

## El azul se representa en HSV con un matiz de alrededor de 240 grados sobre 360.
## El rango de Matiz en OpenCV-HSV es de 0-180, para almacenar el valor en 8 bits.
## Por lo tanto, el azul se representa en OpenCV-HSV como un valor de H alrededor de 240 / 2 = 120.
## Para detectar el azul correctamente, se pueden elegir los siguientes valores:
blue_lower = np.array([100, 150, 0], np.uint8)
blue_upper = np.array([140, 255, 255], np.uint8)

Umbralizar la imagen

Umbralice la imagen HSV para obtener solo los colores azules:

## Máscara de color azul
blue_mask = cv.inRange(hsv_image, blue_lower, blue_upper)

Aplicar la máscara

Aplique la máscara a la imagen original para extraer el objeto azul:

## Utilice la máscara para extraer el objeto azul
blue_object = cv.bitwise_and(image, image, mask=blue_mask)

Mostrar el objeto extraído

Muestre la imagen original y el objeto azul extraído:

## Guarde la imagen en el archivo especificado
cv.imwrite('blue_object.jpg', blue_object)

Resumen

En este tutorial, cubrimos los conceptos básicos de los espacios de color en OpenCV-Python. Con este conocimiento, ahora puedes trabajar con diferentes espacios de color y aplicarlos a diversas tareas de procesamiento de imágenes. También puedes experimentar con otros espacios de color admitidos por OpenCV, como LAB o YCrCb.