Descomponer los colores de una imagen

Para convertir una imagen en color, como la capturada por su cámara, en una imagen binaria, con el objetivo como el «primer plano», necesitamos poner el umbral de la imagen usando el tono, saturación y valor de cada píxel.

El Modelo HSV

A diferencia de RGB, HSV le permite no sólo filtrar según los colores de los píxeles, sino también por la intensidad del color y el brillo.

  • Tono: mide el color del píxel.

  • Saturación: mide la intensidad del color del píxel.

  • Valor: mide el brillo del píxel.

The effects hue, saturation, and value each have on a color.

Puede usar OpenCV para convertir una matriz de imagen BGR a HSV.

hsv_img = cv2.cvtColor(input_img, cv2.COLOR_BGR2HSV)

Nota

El rango de tono de OpenCV es de 1 ° a 180 ° en lugar del común de 1 ° a 360 °. A fin de que convierta un valor de tono común a OpenCV, dividir por 2.

Descomponer los colores

Utilizaremos esta imagen de campo como ejemplo para todo el proceso de procesamiento de imágenes.

A low brightness image with the retroreflective tape showing green.

Al descomponer en colores la imagen usando HSV, usted puede separar la imagen en: objetivo de visión (primer plano) y todo lo demás (segundo plano). El siguiente código de ejemplo convierte una imagen HSV a una imagen binaria al descomponer en colores con valores HSV.

binary_img = cv2.inRange(hsv_img, (min_hue, min_sat, min_val), (max_hue, max_sat, max_val))

Nota

Es posible que estos valores tengan que ajustarse según el lugar, ya que la iluminación ambiental puede diferir según los lugares. Se recomienda permitir la edición de estos valores a través de NetworkTables para facilitar la edición sobre la marcha.

Después de la descomposición, su imagen debería verse así.

After thresholding most of the rest or the image is masked out and the green tape is returned at white.

Como puede ver, el proceso de descomposición puede no ser 100% limpio. Puedes usar operaciones morfológicas para lidiar con el ruido.