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.
