Saltar al contenido

¿Cómo detectar dos colores diferentes usando `cv2.inRange` en Python-OpenCV?

Solución:

A medida que obtienes dos máscaras de colors, luego usa cv2.bitwise_or para conseguir la máscara final.

import cv2

## Read
img = cv2.imread("sunflower.jpg")

## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

## mask of green (36,0,0) ~ (70, 255,255)
mask1 = cv2.inRange(hsv, (36, 0, 0), (70, 255,255))

## mask o yellow (15,0,0) ~ (36, 255, 255)
mask2 = cv2.inRange(hsv, (15,0,0), (36, 255, 255))

## final mask and masked
mask = cv2.bitwise_or(mask1, mask2)
target = cv2.bitwise_and(img,img, mask=mask)

cv2.imwrite("target.png", target)

Fuente:

ingrese la descripción de la imagen aquí

Encuentre verde y amarillo (el rango no es tan preciso):

ingrese la descripción de la imagen aquí


Por cierto, para obtener un rango más preciso, aquí hay un mapa de referencia en mi respuesta relacionada:

Cómo definir un valor de umbral para detectar solo objetos de color verde en una imagen: Opencv

ingrese la descripción de la imagen aquí

La siguiente imagen muestra el espacio de color HSV, que funciona con Tono, Saturación y Valor (o luminosidad).

Espacio de color HSV

Cuando se trabaja en el espacio de color HSV, es importante recordar esto y que conceptos como el rojo y el verde son una especie de conversión a un tipo de datos diferente.

Por lo tanto, sus límites superior e inferior solo pueden ser un punto en este espacio, pero pueden incluir partes del espectro rojo y azul, es decir, púrpura. Debería seleccionar valores de umbral que cumplan con los criterios de cualquier salida de procesamiento que necesite.

O eso o ejecutar dos bucles separados, el primero para reducir el rojo y el segundo para reducir el azul y luego combinar las dos imágenes usando OpenCV Funciones de mezcla. Consulte aquí la combinación de dos espacios de color.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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