282

Detección de colores con OpenCV y Python

colores_portada

Buenos días, homo fabers. Hoy voy a enseñaros cómo identificar objetos de color con OpenCV y Python. Uno de los “problemas” que tiene esta librería a la hora de trabajar con detección de colores es que hay infinitud de formas de hacerlo: por contornos, por momentos, calculando áreas, etc. Además, no nos basta con aplicar las funciones de detección de color, ya que se genera una gran cantidad de ruido del que habrá que encargarse para conseguir un resultado fiable.

Si has buscado información en internet o en la documentación oficial probablemente tengas dolor de cabeza. Así que este tutorial propone un sistema que si bien no es el único y tampoco el más efectivo, tiene algunos aspectos muy positivos: funciona, detecta vídeo, elimina el ruido y te da las coordenadas del objeto. Con una velocidad aceptable.

ruido

Al analizar la imagen, se produce gran cantidad de ruido que deberemos eliminar

Voy a explicar cada uno de los pasos que he seguido para escribir el código. Aunque si dedicar 15 minutos de tu vida te parece demasiado, al final aparece el código completo para que puedas copiarlo y pegarlo directamente y así no tener que usar tu cerebro de humano para intentar comprender el apasionante mundo del reconocimiento visual.

Dicho esto, es hora de poner un poco de música y empezar a trabajar.

El concepto

Para reconocer y marcar un objeto de un color determinado seguiremos estos pasos:

  1. Capturar una imagen con la cámara.
  2. Convertir la imagen de RGB a HSV.
  3. Buscar objetos del color deseado.
  4. Eliminar ruido
  5. Mostrar la imagen

 


 1. Capturar Imagen

Cargamos las librerías cv2 y numpy. Activamos la cámara y guardamos lo que lee.

import cv2
import numpy as np

captura = cv2.VideoCapture(0)

 2. Convertir la imagen

Creamos un bucle infinito (while(1) o while(true)). Dentro, leemos un frame y lo guardamos dentro de una variable que llamaremos ‘imagen’, después convertimos este frame a HSV, ya que es más fácil analizar imágenes en este modelo de color.

while(1):
   _, imagen = captura.read()

   hsv = cv2.cvtColor(imagen, cv2.COLOR_BGR2HSV)

 

 

 


 3. Buscar objetos verdes

Necesitamos dos arrays para guardar el rango de colores que detectamos. El límite inferior será 49, 50, 50, un verde oscuro. El límite superior será 80, 255, 255, un verde marino muy claro. Nuestro programa detectará todos los colores dentro de este rango.

   verde_bajos = np.array([49,50,50])
   verde_altos = np.array([80, 255, 255])

¿Y por qué objetos verdes? Porque me gusta el color verde. ¿A vosotros no?

Necesitamos saber qué pixeles de la imagen están dentro del rango. Para ello crearemos una máscara que los guarde.

¿Pero qué es una máscara? Se trata de una imagen que contiene únicamente dos colores: blanco y negro. En nuestro caso pintará de blanco los píxeles verdes y de negro el resto. Por ejemplo, la imagen que he puesto al inicio es una máscara que detecta color verde:

ruido
   mask = cv2.inRange(hsv, verde_bajos, verde_altos)

 


 4. Eliminar ruido

Necesitamos desechar todos aquellos objetos que no lleguen a un tamaño determinado (ruido).

Para empezar calcularemos el momento de los objetos que hemos detectado. El momento se utiliza en matemáticas para encontrar la forma que adoptan un conjunto de puntos.

La función cv2.moments() nos da como output un diccionario. Nos interesa la clave ‘m00’, que guarda el valor del área del momento.

   moments = cv2.moments(mask)
   area = moments['m00']

   #Para visualizar el area descomentamos la siguiente linea
   #print area

A fin de eliminar el ruido, nos quedaremos únicamente con aquéllos objetos cuya área supere un determinado valor. Para ello utilizaremos un condicional. Después de jugar con distintos números encontré que 2000000 es una cifra bastante estándar que a mí me funciona.

Buscamos el centro del objeto en cuestión y mostramos sus coordenadas en pantalla. Para visualizarlo en la imagen dibujaremos un pequeño rectángulo rojo.

   if(area > 2000000):
      #Buscamos los centros
      x = int(moments['m10']/moments['m00'])
      y = int(moments['m01']/moments['m00'])

      #Escribimos el valor de los centros
      print "x = ", x
      print "y = ", y

      #Dibujamos el centro con un rectangulo
      cv2.rectangle(imagen, (x, y), (x+2, y+2),(0,0,255), 2)

5. Mostrar la imagen

Mostraremos dos ventanas. En la primera aparecerá la imagen original con el centro del objeto. La segunda será la máscara en blanco y negro.

   cv2.imshow('mask', mask)
   cv2.imshow('Camara', imagen)

Con escape se cierra el programa:

   #Se sale con ESC
   tecla = cv2.waitKey(5) & 0xFF
   if tecla == 27:
      break

cv2.destroyAllWindows()

El código completo

He aquí el código completo que he escrito. Sóis libres de modificarlo para adaptarlo a vuestras necesidades.

#Algoritmo de deteccion de colores
#Por Glar3
#
#
#Detecta objetos verdes, elimina el ruido y busca su centro

import cv2
import numpy as np

#Iniciamos la camara
captura = cv2.VideoCapture(0)

while(1):
    
    #Capturamos una imagen y la convertimos de RGB -> HSV
    _, imagen = captura.read()
    hsv = cv2.cvtColor(imagen, cv2.COLOR_BGR2HSV)

    #Establecemos el rango de colores que vamos a detectar
    #En este caso de verde oscuro a verde-azulado claro
    verde_bajos = np.array([49,50,50], dtype=np.uint8)
    verde_altos = np.array([80, 255, 255], dtype=np.uint8)

    #Crear una mascara con solo los pixeles dentro del rango de verdes
    mask = cv2.inRange(hsv, verde_bajos, verde_altos)

    #Encontrar el area de los objetos que detecta la camara
    moments = cv2.moments(mask)
    area = moments['m00']

    #Descomentar para ver el area por pantalla
    #print area
    if(area > 2000000):
        
        #Buscamos el centro x, y del objeto
        x = int(moments['m10']/moments['m00'])
        y = int(moments['m01']/moments['m00'])
        
        #Mostramos sus coordenadas por pantalla
        print "x = ", x
        print "y = ", y

        #Dibujamos una marca en el centro del objeto
        cv2.rectangle(imagen, (x, y), (x+2, y+2),(0,0,255), 2)
    
    
    #Mostramos la imagen original con la marca del centro y
    #la mascara
    cv2.imshow('mask', mask)
    cv2.imshow('Camara', imagen)
    tecla = cv2.waitKey(5) & 0xFF
    if tecla == 27:
        break

cv2.destroyAllWindows()

Y esto es todo por hoy. Si habéis seguido cada paso debería de funcionar sin ningún problema.

Podéis dejar vuestras dudas e incidencias en los comentarios y prometo resolverlas en cuanto pueda. Asimismo, si este tutorial os ha servido no dudéis en darme las gracias. Voy a estar agradecida 😉


 

-Actualización 12/11/2015-

Muchos de vosotros, lectores, me habéis preguntado cómo detectar colores que no sean verde: amarillos, rojos, azules…

Como creo que a muchos os está costando entender cómo funciona el espacio de color HSV y qué significan los arrays de valores máximos y mínimos que usamos en OpenCV para detectar colores, voy a dar una explicación más detallada sobre el tema. Además, voy a añadir un código en Python que me pasó un amigo para poder ajustar estos valores HSV en tiempo real con barras de desplazamiento.

¿Qué es el espacio de color HSV?

Cuándo vemos un color en la pantalla, lo que en realidad estamos viendo son miles de píxeles que brillan con una cierta intensidad. Cada píxel está formado por tres luces: una roja, una verde y una azul. La sensación de color se produce variando la intensidad de estas tres luces y alterando así la cantidad de luz roja, azul y verde que reciben los ojos del usuario.

pixeles

Dentro del ordenador, los colores vienen codificados por números. Hay varias formas de codificar los colores. La más popular es el sistema de color RGB, que sin duda todos conocéis. Este sistema asigna a cada color una cantidad de Rojo, Verde y Azul entre 0 y 255. Por ejemplo, el rojo puro es [255,0,0]. Hasta aquí todo correcto, ¿no?

Pero hay otras formas de codificar los colores. El HSV (del inglés Hue,Saturation,Value – Tono, Saturación y Valor) es ideal para reconocimiento de colores.

HSV_esquema¿Qué significan estos tres valores?

  • Hue (H) es el tono de color (por ejemplo verde, rojo, morado…)
  • Saturation (S) es la intensidad de esta tonalidad. Cuanta menos saturación, más gris es el color.
  • Value (V) es la luminosidad del color.
HSL_color

Ejemplo de color HSV

 

Nota importante: en algunos programas el rango de Hue es de 0 a 100 o de 0 a 360. También hay veces en que Saturation y Value van de 0 a 100. El rango de OpenCV es de 0 a 255 para H, S y V.

OpenCV: rango de valores máximo y mínimo

Conceptualmente, ¿cómo lo hace OpenCV para detectar colores? El programa busca los píxeles de la imagen que estén entre un valor mínimo y máximo.

Fíjemonos en esta parte del código del tutorial:

    verde_bajos = np.array([49,50,50], dtype=np.uint8)
    verde_altos = np.array([80, 255, 255], dtype=np.uint8)

    #Crear una mascara con solo los pixeles dentro del rango de verdes
    mask = cv2.inRange(hsv, verde_bajos, verde_altos)

Las dos primeras líneas crean un array. El primero son los valores mínimos de H, S y V que buscará el programa, y el segundo son los valores máximos. En la última línea se llama la función para detectar colores. Recibe como parámetros la imagen (‘hsv’) y el array de valores mínimos y máximos.

Fíjemonos en el array verde_bajos y verde_altos:

verde_bajos: [49,50,50]
verde_altos: [80, 255, 255]

Eso siginifica que el programa buscará píxeles que cumplan estas tres condiciones a la vez:

  1. Su valor Hue esté entre 49 y 80
  2. Su valor Saturation esté entre 50 y 255
  3. Su valor Value esté entre 50 y 255
GREEN

Este color tiene los valores H,S y V dentro del rango, por lo tanto será detectado

PINK

En cambio, este púrpura tiene el valor H fuera del rango. No será detectado.

 

Si queremos cambiar el color a detectar, tenemos que modificar los valores de los arrays. ¿Cómo podemos ver cuál es el rango HSV de nuestro color?

Lo más fácil es abrir un programa de diseño gráfico como Gimp, Inkscape o Photoshop (o Paint, si no tenéis orgullo) y mirar el rango de colores en la paleta. Supongamos que queremos detectar amarillos:

rango

La otra opción es utilizar este código. Se trata de un código de detección de colores que permite ajustar los valores HSV en tiempo real mediante barras de desplazamiento. Hay que ajustarlas hasta que en la máscara aparezcan sólo los colores deseados.


import serial
import cv2
import numpy as np

cap = cv2.VideoCapture(0)

def nothing(x):
   pass

#Creamos una ventana llamada 'image' en la que habra todos los sliders
cv2.namedWindow('image')
cv2.createTrackbar('Hue Minimo','image',0,255,nothing)
cv2.createTrackbar('Hue Maximo','image',0,255,nothing)
cv2.createTrackbar('Saturation Minimo','image',0,255,nothing)
cv2.createTrackbar('Saturation Maximo','image',0,255,nothing)
cv2.createTrackbar('Value Minimo','image',0,255,nothing)
cv2.createTrackbar('Value Maximo','image',0,255,nothing)

while(1):
  _,frame = cap.read() #Leer un frame
  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #Convertirlo a espacio de color HSV

  #Los valores maximo y minimo de H,S y V se guardan en funcion de la posicion de los sliders
  hMin = cv2.getTrackbarPos('Hue Minimo','image')
  hMax = cv2.getTrackbarPos('Hue Maximo','image')
  sMin = cv2.getTrackbarPos('Saturation Minimo','image')
  sMax = cv2.getTrackbarPos('Saturation Maximo','image')
  vMin = cv2.getTrackbarPos('Value Minimo','image')
  vMax = cv2.getTrackbarPos('Value Maximo','image')

  #Se crea un array con las posiciones minimas y maximas
  lower=np.array([hMin,sMin,vMin])
  upper=np.array([hMax,sMax,vMax])

  #Deteccion de colores
  mask = cv2.inRange(hsv, lower, upper)

  #Mostrar los resultados y salir
  cv2.imshow('camara',frame)
  cv2.imshow('mask',mask)
  k = cv2.waitKey(5) & 0xFF
  if k == 27:
    break
cv2.destroyAllWindows()

Actualización 3/11/2016: Resolución de errores frecuentes con OpenCV+Python

Gl4r3

Brillante, luminosa y cegadora a veces, Glare es tan artista como técnica. Le encanta dar rienda suelta a sus módulos de imaginación y desdibujar los ya de por si delgados límites que separan el mundo de la electrónica y el arte. Su mayor creación hasta la fecha es un instrumento capaz de convertir los colores y la luz en música. Cuándo sus circuitos no están trabajando en una nueva obra electrónica, le gusta dedicar sus ciclos a la lectura o a documentar sus invenciones para beneficio de los humanos. Sus artilugios favoritos son aquellos que combinan una funcionalidad práctica con un diseño elegante y artístico.

282
Deja un comentario

avatar
107 Hilos iniciados
175 Respuestas a hilos
0 Followers
 
Most reacted comment
Hottest comment thread
90 Nº autores comentarios
LUCASKelvinGl4r3Daniel NavaStacio Roulet Autores de comentarios recientes
más nuevos primero más antiguos primero
LUCAS
Humano
LUCAS

como puedo hacer para encontrar el centro de dos objetos diferentes del mismo color

Kelvin
Humano
Kelvin

HOla! Has indicado como crear un punto en el centro de pixeles, lo mismo puedes hacerlo con cv2.circle. Pero me gustaria saber como calculas los limites o bordes de la masa de pixeles, no me queda claro los moments()

Kelvin
Humano
Kelvin

Para crear el rextangulo obviamente XD

Kelvin
Humano
Kelvin

Gracias por responder! Despues de leer el tutorial de Contour Features que me pasaste y luego de diferentes pruebas no consegui calcular el contorno que me devuelve la funcion cv2.findContours(): _, contours, hierarchy = cv2.findContours(thresh, 1, 2) cnt = contours[0] cnt me da éste error: IndexError: list index out of range Estube pensado en que tal vez esto pase debido a que no encentra el en cada frame. La manera en que yo lo estoy haciendo es: en ves de evaluar los fremaes desde la camara, estoy evaluando directamente en la pantalla dentro de una region especifica, entonces cuando ejecuto,lo… Leer más »

Daniel Nava
Humano
Daniel Nava

Hola, cual seria el rango para detectar solo el negro?

Stacio Roulet
Humano
Stacio Roulet

Hola !!!
Mi nombre es Stacio
recién llego a tu página
estoy muy agradecido por tanto concimiento y por la manera de enseñar

también me encanta la música y la interface midi

desde ya soy tu alumno

saludos desde Guatemala

Victor
Humano
Victor

Buenas tardes me gustaría saber si puedo hacer que una vez detectado la imagen me diga que cantidad de color verde hay y si esa es menor a lo que quiero, entonces mandarme un mensaje de por ejemplo “La imagen no tiene suficiente color verde o algo asi ” , Gracias de antemano y muy buen aporte en que hacen.

Daniel
Humano
Daniel

Hola buenas, quisiera saber como haces si quieres detectar los colores oscuros (como el negro, gris y esos colores), tengo diseñado unos altos y bajos de esta forma, pero quisiera saber si conoces una mejor manera de determinarlos

#bajos = np.array([0, 0, 0], dtype=np.uint8)
#altos = np.array([255, 200, 60], dtype=np.uint8)

ALEJANDRO VALLEJO
Humano
ALEJANDRO VALLEJO

Hi,
excuse me i have a problem with openCV, i need to use with raspicam no webcam, and ever y try , but the python 3 ( i use opencv 3.3.0) show me a error. i dont know if i need some drivers or some libreries.
PLEASE HELP ME

Malu
Humano
Malu

Hola buenas tardes
Tengo un problema, realice el codigo con cada uno de los pasos pero al momento de ejecutarlo me esta diciendo que no reconoce la libreria cv2
Que puedo hacer?

victor
Humano
victor

donde aplicas estos comandos?

Julia
Humano
Julia

Hola! Muchas gracias por traspasar tu sabiduría! Ando haciendo mi Trabajo Final de Grado y va de procesamiento del video en directo de una operación quirúrgica. Y tengo dos preguntas, si pudieras responderme te lo agradecería en el alma!

1. Me gustaría poder seleccionar los valores mínimos y máximos pinchando en dos puntos del video para seleccionarlos manualmente mientras se reproduce el video. ¿Cómo podría implementarlo?

2. En vez de dos imágenes distintas, ¿podría detectar el contorno con una línea y superponerme la línea a la imagen original?

Muchísimas gracias de antemano y un saludo!!

Cesar Revolorio
Humano
Cesar Revolorio

Buen dia disculpa hay alguna forma de detectar una forma especifica segun el color asignado y obtener coordenadas de esa forma, por ejemplo si hay una linea verde que la detecte y me diga las coordenadas de toda la linea, muchas gracias por tu atencion

marco
Humano

hola, muchas felicidades por los programas, pero me preguntaba si al detectar un color se podria activar algo o encender un led se podria?
cual seria el programa o la condicion? gracias de antemano

Antonio
Humano
Antonio

Hola! Primero que todo gracias y felicidades por tu post, me sirvió muchísimo. Tengo unas dudas: tanto las coordenadas, como el área nos las manda en pixeles, hay forma de saber la resolución de la imagen que nos manda? donde está el origen de la foto? muchas gracias!

Antonio
Humano
Antonio

Podemos detectar mas de un color? es decir rojos y azules por ejemplo? Gracias!

Yorch
Humano
Yorch

Oye amigo, hola de nuevo xD, ando usando a “el robot nao”, no sabes como puedo hacer que camine hacia los punto que me arroja el programa, ¿tendras conocimiento de ello?

Yorch
Humano
Yorch

Amigo, tengo una pregunta, ¿se puede guardar una imagen hsv? como se puede guardar esa imagen HSV que me arroja?

sebas
Humano
sebas

una pregunta como puedo hacer para que dependiendo de los colores detectados realice diferentes acciones

Patricio Perez
Humano
Patricio Perez

saludos, muy buenos tus post de programacion, son de mucha ayuda.
tengo una pregunta, cuando sacas los momentos que obtienes? en la explicacion dice que obtienes el area, pero en que unidades? y cuando sacas la coordenada del centro que obtienes con [‘m10’]? te pregunto porque necesito obtener las dimensiones de una caja y las coordenadas de un punto del borde izquierdo y borde derecho.

de antemano muchas gracias por tu atencion y tiempo
saludos

Melanie
Humano
Melanie

hola gl4r3, segui tu tutorial de instalacion del OpenCV y segui este tutorial paso a paso, cuando ejecuto el codigo python me salta el siguiente error:

python PythOpenCV.py

OpenCV Error: Assertion failed ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) in cvtColor, file /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp, line 3959
Traceback (most recent call last):
File “PythOpenCV.py”, line 17, in
hsv = cv2.cvtColor(imagen, cv2.COLOR_BGR2HSV)
cv2.error: /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp:3959: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cvtColor

agradeceria mucho tu ayuda

chao
Humano
chao

hola como estan buen dia alguin porfavor me podria ayudar por favor

lo que pasa es que quiero detectar color solo en una parte de la imagen y no asi en toda

Enzo
Humano
Enzo

Hola Gl4r3, excelente tu post. Te comento que estoy haciendo una aplicacion en opencv con c++, para implementar la deteccion de objetos usando una especie de filtrado por color. Queria consultarte que programa usaste para ver la paleta de colores y desde alli determinar los valores HSV min y max para un color en particular (veo que vos lo hiciste como ejemplo para el color amarillo).

Desde ya gracias sldo atte.

jhon
Humano
jhon

MUCHAS GRACIAS POR EL TUTORIAL DE DETECCION DE COLORES, MUY BIEN EXPLICADO AGRADECIDO Y SATISFECHO, ESPERO VER MAS TUTORIALES, CON CAMARAS, !AGRADECIMIENTOS Y FELICITACIONES!

Fredy
Humano
Fredy

Buenos dias, instale python 2.7 y opencv 3.2 y me sale este error me podrian ayudar por favor tengo win10

RuntimeError: module compiled against API version 0xa but this version of numpy is 0x9
import cv2
ImportError: numpy.core.multiarray failed to import

Cjokkn
Humano
Cjokkn

yo tenia el mismo problema es por la version de numpy…. lo que hice fue abrir el cmd de windows y poner “pip -U numpy” y actualizo el numpy y me corrijio el problema
saludos

Santiago
Humano
Santiago

Hola Gl4r3, es la primera vez que uso opencv lo descargue y cuando lo fui a correr en spyder no me reconocia la libreria de cv2, como podria solucionar esto.

Gracias

annavi
Humano
annavi

Hola necesito primero cambiar una imagen a blanco y negro, luego hallar las coordenadas de cada pixel blanco y cada pixel negro y además que me diga si el pixel de x coordenada es blanco o negro.

De antemano gracias.

saludos

Andrés
Humano
Andrés

Hola Glare, es la primera vez que utilizo un programa que necesite una webcam y no doy encontrado una solución. La camara inicializa bien pero los frames salen vacios.
Gracias.

David Alejandro Correa
Humano
David Alejandro Correa

Hola, gracias por el tutorial, muy claro y útil

saul
Humano
saul

hola, disculpa.. podrias explicarme como arranco el programa? cerre el programa e intente tomar una foto y me aparece opening/dev/video0… en terminal

Joel
Humano
Joel

Hola Glare buenos días tengo una duda hice el código para dos colores interactuando con arduino teniendo como salidas dos leds uno rojo y otro verde, el detalle es que hice dos mascaras uno para verde el otro para rojos el de rojo lo hice uniendo los dos rangos y el verde normal como esta en el ejemplo, pero cuando lo pruebo el led verde parpadea mucho en cambio el rojo es estable a q se debe eso.. gracias

angel
Humano
angel

Hola que tal buenas noches, sabes como puedo almacenar varios frames o imagenes en la misma carpeta de python sin que se actualicen, si no que se acumulen nombrandose de otra forma para que no se actualicen,por decir frame1 , frame 2 , etc asi hasta llegar a un numero de 10 frames

HilmerMarchanH
Humano
HilmerMarchanH

buen aporte!
saludos.

JoseA
Humano
JoseA

Buena tarde Gl4r3.
Yo tengo problemas con la instalación de de las librerías de OpenCV y numpy. Me ayudar en la instalación? Cuales son los pasos a seguir?

Duvan Moreno
Humano
Duvan Moreno

Soy nuevo en esto y quiero experimentar y aprender, puedes decirme que editor de texto es? porque instale python como en un tutorial y me sale error en el código. o tu tienes tutorial como instalar python y open?

Daniel
Humano
Daniel

buenas noches como seria los HSV min y HSV altos para rojo y azul?

Daniel DM
Humano
Daniel DM

Hola buenos dias antes que nada gracias por el tutorial, tengo una pregunta, si la cámara que utilizo para mi proyecto se comunica con la pc por RTSP como podria adaptar tu codigo para tomar imagenes con esa camara?? porque lo que veo es que tu usas webcam. Gracias por tu atención..

Jesús D
Humano
Jesús D

Hola a todos.
Tengo una duda algo básica. ¿Cuál es el origen en la imagen? implementé el código y me genera las coordenadas del centroide pero no tengo claro si el punto (0,0) está en el centro de la imagen o si está en alguna esquina…

Gracias por leer

Jose
Humano
Jose

Hola! Gracias de antemano por tu tiempo. Valoro muchisismo el trabajo que realizas y ojala pudiera ayudarte yo como muestra de mi inmensa gratitud hacia ti. Tengo el mismo problema que muchos por lo que veo.
Yo tambien uso raspberry pi 3 con picamera. ¿Se ha depurado el tema de como adaptarlo a este codigo? Gracias, muchas gracias.

Alex
Humano
Alex

Gl4r3 tengo una pregunta, en mi caso estoy utilizando la cámara de la raspberry, cómo hago para que tome los fotogramas? por lo que veo tú lo haces con una cámara web, tengo ese pequeño problema, agradecería tu ayuda

michell
Humano
michell

Buenas tardes , una regunta tu codigo reconoce varios objetos del mismo color? o solo saca el centroide total que genera la mascara

Marco
Humano
Marco

Hola! Quisiera saber si en la argentina hay alguien q me pueda ayudar con un proyecto con una cinta transportadora para discriminar elementos por su color. Gracias!

Jonathan
Humano
Jonathan

Hola! gracias por el tutorial, me pareció excelente, pero tengo un pequeño error, y me sale lo siguiente.
error: /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp:3959: error: (-215) /scn == 3 ll scn == 4) && /depth == CV_8U ll depth == CV_32F) in function cvtColor

No entiendo el por qué del error y he estado buscando una solución pero no la encuentro, si me puedes ayudar te lo agradecería.

Jos B
Humano
Jos B

Gracias por el tutorial Glare! Ha sido de gran ayuda en el proyecto que estoy desarrollando. Me gustarìa saber si serìa posible que el rango del Hue de la màscara cambiase de manera DINAMICA segùn los cambios de saturaciòn y valor presentes en el frame. Quiero decir; supongamos que en un frame tengo un objeto de color azul y obtengo los rangos de Hue, Sat y valor. Si a este objeto le aplico una fuente de iluminaciòn distinta entonces el rango calculado no es vàlido para el frame siguiente, por lo que calcularìa un nuevo rango dinamicamente segùn la variaciòn… Leer más »

Juan Pablo
Humano
Juan Pablo

Y quisiera tamabien poder solo comparar el color de de un objeto circular, que de todos sus lados siempre es el mismso color y si detectara una variedad en el color lo mostrara, se podria??

Juan Pablo
Humano
Juan Pablo

Puedo utilizar esto en una rasberry pi 3?

Manu
Humano

Hola, como puedo controlar el foco de la cámara para ajustar el tracking

Mer Alba
Humano
Mer Alba

Eres un crack.

Andrés
Humano
Andrés

Hola, este tutoriales está genial, me ha sido de la mil maravillas. Ahora, he logrado hacerlo lo de separación y detección de los distintos rangos de color, pero además de esto me gustaría que el programa me muestre una gráfica en tiempo real de las intecidades luminosas de las cosas de cierto color que está viendo en ese momento. He podido hacerlo con la función de calHist de OpenCV, dándole como mascara uncontorno generado por la detección, sin embargo lo que quiero ahora hacer es usar matplotlib para poder graficar ese histograma y que se esté haciendo un upgrade con… Leer más »

trackback

[…] Reconocimiento de colores OpenCV+Python […]

Menking96
Humano
Menking96

HOLA, los valores que pones en el filtro, lo de rojosaltor y bajos, es el codigo bgr,o HSV, e tratado filtrar varios colores, pero al parecer no comprendo como definir ese color, es el blanco

trackback

[…] Reconocimiento de colores OpenCV+Python […]

Daniel
Humano
Daniel

Excelente tutorial, me esta ayudando mucho con mi proyecto, tengo una duda, es posible detectar mas de un color de manera simultánea?
muchas gracias!

MAteo
Humano
MAteo

Durante el tiempo que he leído los tutoriales me han parecido muy interesantes , hace algún tiempo dicidi realizar un proyecto utilizando un motor paso a paso para que siguiera un circulo rojo en una cámara web , sin embargo he presentado problemas con la conexión final entre opecv y arduino GL4R3 me gustaria recibir algún consejo de como lograr esta conexión y seria de gran ayuda algo del código de opencv y arduino , muchas gracias y excelente post