¿Cómo detectar parches de colores en una imagen usando OpenCV?
image-processing computer-vision (1)
Procesar la imagen colorida en el
HSV color-space
es una buena dirección.
Y divido los canales y encuentro que el canal
S
es genial.
Porque
S
es
Saturation(饱和度)
de color.
Luego umbral de la
S
con un umbral de
100
, obtendrá esto.
Será fácil separar la región colorida en la imagen binaria trillada.
Como sugiere @Mark, podemos usar un umbral adaptable que no sea el fijo.
Entonces, agregue
THRESH_OTSU
en las banderas.
El código central de Python se presenta de la siguiente manera:
##(1) read into bgr-space
img = cv2.imread("test.png")
##(2) convert to hsv-space, then split the channels
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)
##(3) threshold the S channel using adaptive method(`THRESH_OTSU`)
th, threshed = cv2.threshold(s, 100, 255, cv2.THRESH_OTSU|cv2.THRESH_BINARY)
##(4) print the thresh, and save the result
print("Thresh : {}".format(th))
cv2.imwrite("result.png", threshed)
## >>> Thresh : 85.0
Respuestas relacionadas:
Estoy tratando de detectar si la imagen (dibujo en blanco y negro) está coloreada o no en las condiciones de la habitación con una cámara móvil.
He podido obtener este resultado
usando el siguiente código
Mat dest = new Mat (sections[i].rows(),sections[i].cols(),CvType.CV_8UC3);
Mat hsv_image = new Mat (sections[i].rows(),sections[i].cols(),CvType.CV_8UC3);
Imgproc.cvtColor (sections[i],hsv_image,Imgproc.COLOR_BGR2HSV);
List <Mat> rgb = new List<Mat> ();
Core.split (hsv_image, rgb);
Imgproc.equalizeHist (rgb [1], rgb [2]);
Core.merge (rgb, sections[i]);
Imgproc.cvtColor (sections[i], dest, Imgproc.COLOR_HSV2BGR);
Core.split (dest, rgb);
¿Cómo puedo saber si la imagen está coloreada o no? El color puede ser cualquiera y tiene condiciones ambientales. Por favor, ayúdame en esto ya que soy principiante.
Gracias