Portafolio personal · Desarrollo web e inteligencia artificialCix Code

Paleta de comandos

↑ ↓ navegar↵ abrirEsc cerrar
Blog
Visión Computacional

Segmentar por color con HSV y OpenCV

Un ejemplo de cómo aislar píxeles por color y ajustar los umbrales para distintas condiciones de luz.

· 2 min de lectura

Una máscara de color marca qué píxeles entran en un rango y cuáles quedan fuera. En el proyecto académico de segmentación por color, la idea central es convertir una imagen a HSV antes de aplicar ese rango. Esta nota muestra el procedimiento con un ejemplo reproducible en OpenCV.

Qué representan H, S y V

El tono describe la familia de color. La saturación indica qué tan intenso es ese color frente a un gris. El valor representa el brillo. Separar los tres canales permite variar el brillo permitido sin cambiar el intervalo de tono.

En imágenes de 8 bits convertidas con cv.COLOR_BGR2HSV, OpenCV representa el tono entre 0 y 179. La saturación y el valor van de 0 a 255. Los rangos de otras herramientas pueden usar otra escala.

Crear y aplicar una máscara

El ejemplo busca un rango inicial de verdes. Los límites sirven como punto de partida y se ajustan con imágenes representativas del problema.

import cv2 as cv
import numpy as np

imagen = cv.imread("muestra.jpg")
if imagen is None:
    raise FileNotFoundError("No se pudo abrir muestra.jpg")

hsv = cv.cvtColor(imagen, cv.COLOR_BGR2HSV)
minimo = np.array([35, 70, 55], dtype=np.uint8)
maximo = np.array([85, 255, 255], dtype=np.uint8)
mascara = cv.inRange(hsv, minimo, maximo)
resultado = cv.bitwise_and(imagen, imagen, mask=mascara)
cv.imwrite("mascara.png", mascara)
cv.imwrite("resultado.png", resultado)

inRange devuelve una máscara binaria. Los píxeles dentro de los límites toman el valor 255. Después, bitwise_and usa la máscara para conservar solo esas posiciones de la imagen original. Los límites del ejemplo son un punto de partida independiente de los del informe académico.

Revisar el resultado

Empieza por la máscara. Las zonas blancas representan píxeles aceptados y las negras, píxeles descartados. Prueba imágenes con distintas luces y fondos. Si las sombras eliminan zonas válidas, revisa primero el mínimo de valor. Si se cuelan zonas grises, revisa la saturación. Cuando el tono cruza el límite entre 179 y 0, como sucede en ciertos rangos de rojo, combina dos máscaras.

Un filtro por color también conservará objetos del fondo que compartan el mismo rango. La elección depende de qué errores puedas tolerar y de qué tan controlada esté la escena.

Proyecto de segmentación · Umbrales con inRange en OpenCV

Evidencia del proyecto

Ilustración original junto a la máscara binaria y la imagen con las regiones verdes conservadas.
Comparación de la imagen didáctica, la máscara HSV y la segmentación obtenida en la práctica.
Ver el caso de estudio de Segmentación de imágenes por color HSV