segmentation mulspectrum color_bgr2lab color cielab bitwise_and python opencv

mulspectrum - seguimiento de color de python opencv



hsv segmentation opencv (1)

Bueno, lo primero que debes saber es qué espacio de color estás usando. Solo un pequeño tutorial de espacios de color en OpenCV para Mat del tipo CV_8UC3 . (Imágenes de Wikipedia)

HSV

En el espacio de color HSV (Hue, Saturation, Value), H da el color dominante del color, S la saturación del color, V la claridad. En OpenCV, los rangos son diferentes. S, V están en [0,255], mientras que H está en [0, 180]. Por lo general, H está en el rango [0,360] (el círculo completo), pero para caber en un byte (256 valores diferentes) su valor se reduce a la mitad.

En el espacio HSV es más fácil separar un solo color, ya que simplemente puede establecer el rango adecuado para H, y solo tener cuidado de que S no sea demasiado pequeño (será casi blanco) y V no sea demasiado pequeño (será oscuro).

Entonces, por ejemplo, si necesita colores casi azules , necesita que H esté alrededor del valor 120 (digamos en [110,130]), y S, V no demasiado pequeño (digamos en [100,255]).

El blanco no es un tono (el arcoíris no tiene color blanco), sino que es una combinación de color.

En HSV, debe tomar todo el rango de H (H en [0, 180]), valores de S muy pequeños (digamos S en [0, 25]) y valores de V muy altos (digamos V en [230, 255] ) Esto corresponde básicamente a la parte superior del eje central del cono.

Entonces, para que rastree objetos blancos en el espacio HSV, necesita:

lower_white = np.array([0, 0, 230]) upper_white = np.array([180, 25, 255])

O, dado que definió un valor de sensibilidad, como:

sensitivity = 15 lower_white = np.array([0, 0, 255-sensitivity]) upper_white = np.array([180, sensitivity, 255])

Para otros colores:

green = 60; blue = 120; yellow = 30; ... sensitivity = 15 // Change color with your actual color lower_color = np.array([color - sensitivity, 100, 100]) upper_color = np.array([color + sensitivity, 255, 255])

El valor H rojo es 0, por lo que debe tomar dos rangos y "OR" juntos:

sensitivity = 15 lower_red_0 = np.array([0, 100, 100]) upper_red_0 = np.array([sensitivity, 255, 255]) lower_red_1 = np.array([180 - sensitivity, 100, 100]) upper_red_1 = np.array([180, 255, 255]) mask_0 = cv2.inRange(hsv, lower_red_0 , upper_red_0); mask_1 = cv2.inRange(hsv, lower_red_1 , upper_red_1 ); mask = cv2.bitwise_or(mask1, mask2)

¡Ahora deberías poder seguir cualquier color!

A continuación se muestra mi código de Python para el seguimiento de objetos de color blanco.
Funciona, pero solo durante unos segundos y luego toda la pantalla se vuelve negra y, en algunas ocasiones, no funciona.
Experimenté con el color azul y funciona, pero el blanco y el verde me están dando problemas:

import cv2 import numpy as np cap = cv2.VideoCapture(0) while(1): _, frame = cap.read() hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # define range of white color in HSV # change it according to your need ! sensitivity = 15 lower_white = np.array([0,0,255-sensitivity]) upper_white = np.array([255,sensitivity,255]) # Threshold the HSV image to get only white colors mask = cv2.inRange(hsv, lower_white, upper_white) # Bitwise-AND mask and original image res = cv2.bitwise_and(frame,frame, mask= mask) cv2.imshow(''frame'',frame) cv2.imshow(''mask'',mask) cv2.imshow(''res'',res) k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows()