DETECCIÓN DE COLORES Y Tracking en OpenCV – Parte2
CONTENIDO
- Detección del color Azul con OpenCV
- Encontrar los contornos correspondientes al color azul con OpenCV
- Dibujar contornos de acuerdo a su área, buscar su centro y visualizar sus coordenadas con OpenCV y Python
- Detectar varios colores en OpenCV
En el post anterior vimos como detectar colores utilizando OpenCV y Python, y llegamos a obtener una imagen binaria, en donde la región en blanco representaba la presencia del color que se deseaba detectar, mientras que en negro donde no se encontraba dicho color. Pues bien, vamos a trabajar un poquito más con la detección de colores y encerraremos las regiones en donde estén los colores deseados, descartaremos regiones pequeñas que no sean de importancia, además encontraremos el punto central y coordenadas del color detectado. ¡Vamos por ello!
Te había hablado de 4 pasos que sigo para poder detectar un color, en el post anterior, estos consistían de:
Paso 1: Imagen a procesar
Paso 2: Transformar de BGR a HSV
Paso 3: Determinar los rangos en donde se encuentre el color a detectar
Paso 4: Visualización
En ese post tratamos de detectar el color rojo, ahora en cambio detectaremos el color azul, veamos:
Detección del color Azul en una imagen con OpenCV
Tomemos en cuenta la siguiente imagen para determinar los rangos en H donde está pudiera estar presente el color azul:

Figura 1: Sección en H donde está presente el color azul.
Continuemos con la programación:
import cv2 import numpy as np cap = cv2.VideoCapture(0) azulBajo = np.array([100,100,20], np.uint8) azulAlto = np.array([125,255,255], np.uint8) while True: ret, frame = cap.read() if ret==True: frameHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(frameHSV, azulBajo, azulAlto) cv2.imshow('maskAzul', mask) cv2.imshow('frame', frame) if cv2.waitKey(1) & 0xFF == ord('s'): break cap.release() cv2.destroyAllWindows()
En la líneas 1 y 2 importamos OpenCV y numpy, mientras que en las líneas 6 y 7 entregamos el rango necesario para detectar el color azul en HSV. Como este procedimiento se lo va a realizar a través de un video streaming, la imagen o fotograma que vamos a usar es frame
, en la línea 11. Luego en la línea 14 transformamos la imagen de BGR a HSV, en tanto que en la línea 15 obtenemos una imagen binaria que visualizamos en la línea 17, mientras que a frame
lo visualizamos en la línea 18. La visualización la tendríamos de la siguiente manera:

Figura 2: Izq. Imagen de entrada. Der. Imagen binaria en donde el blanco representa el color azul, y el negro la ausencia del mismo.
Encontrar los contornos correspondientes al color azul con OpenCV
Es a partir de aquí que vamos a incursionar en los contornos. Una vez que tenemos una imagen binaria podemos aplicar cv2.findContours
, en donde se encerrarán las áreas de color blanco, para ello añadiremos esta función, y para dibujar los contornos encontrados usaremos cv2.drawContours
. Veamos como quedaría el código hasta aquí:
import cv2 import numpy as np cap = cv2.VideoCapture(0) azulBajo = np.array([100,100,20],np.uint8) azulAlto = np.array([125,255,255],np.uint8) while True: ret,frame = cap.read() if ret==True: frameHSV = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) mask = cv2.inRange(frameHSV,azulBajo,azulAlto) _,contornos,_ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(frame, contornos, -1, (255,0,0), 3) cv2.imshow('maskAzul',mask) cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('s'): break cap.release() cv2.destroyAllWindows()
En a línea 16 se ha especificado la función cv2.findContours
, a ella le entregamos como primer argumento la imagen binaria, en nuestro caso mask
, el segundo argumento indica que se tomarán en cuenta únicamente los contornos externos y finalmente con cv2.CHAIN_APPROX_SIMPLE
, se indica que se guarden solo algunos puntos del contorno total. Si quieres profundizar un poquito más en este tema te dejo este video.
NOTA: Recuerda que para este programa usé OpenCV 3.4.4, por lo tanto se obtienen 3 valores al usar cv2.findContours
, donde el segundo corresponde a los contornos. Si trabajas con otra versión como OpenCV 4, asegurate de tomar esto en cuenta ya que allí obtendrás dos valores. Puedes revisar esto en la documentación de OpenCV.
En la línea 18 con cv2.drawContours
dibujamos todos los contornos encontrados en frame
, luego especificados los contornos que se dibujaran, con -1 dibujamos todos los contornos encontrados, luego especificamos el color en BGR con el que rodeamos los contornos y finalmente el grosor de línea.
Si se te hace un poquito complicado entender estas dos líneas, recuerda que tengo un video explicándolo, además iré subiendo poco a poco el contenido de mis videos para que puedas acceder a la programación. Bien, tendríamos la siguiente visualización:

Figura 3: Izq. Imagen de entrada sobre la cual se dibujan los contornos encontrados en azul. Der. Imagen binaria
Como podrás ver en la figura 2, los contornos se están dibujando en la imagen de entrada, y lo están haciendo de color azul, esto debido a que en cv2.drawContours
especificamos que se dibuje en frame
. Además se puede apreciar que también se han encerrado pequeñas áreas que no precisamente corresponden al objeto que deseamos detectar. ¡Hasta aquí vamos muy bien!.
Dibujar contornos de acuerdo a su área, buscar su centro y visualizar sus coordenadas con OpenCV y Python
En esta sección veremos como dibujar contornos de acuerdo a su área, esto para descartar esas pequeñas porciones en la imagen que se visualizaban como de color azul pero que no corresponden al objeto (en este caso la pelotita de color azul), y que se podría decir que son el ruido de nuestra detección de colores. Una vez que se tengan los contornos con los cuales trabajar se procederá a encontrar su centro para finalmente visualizar sus coordenadas x e y en la imagen.
import cv2 import numpy as np cap = cv2.VideoCapture(0) azulBajo = np.array([100,100,20],np.uint8) azulAlto = np.array([125,255,255],np.uint8) while True: ret,frame = cap.read() if ret==True: frameHSV = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) mask = cv2.inRange(frameHSV,azulBajo,azulAlto) _,contornos,_ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #cv2.drawContours(frame, contornos, -1, (255,0,0), 3) for c in contornos: area = cv2.contourArea(c) if area > 3000: M = cv2.moments(c) if (M["m00"]==0): M["m00"]=1 x = int(M["m10"]/M["m00"]) y = int(M['m01']/M['m00']) cv2.circle(frame, (x,y), 7, (0,255,0), -1) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(frame, '{},{}'.format(x,y),(x+10,y), font, 0.75,(0,255,0),1,cv2.LINE_AA) nuevoContorno = cv2.convexHull(c) cv2.drawContours(frame, [nuevoContorno], 0, (255,0,0), 3) #cv2.imshow('maskAzul',mask) cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('s'): break cap.release() cv2.destroyAllWindows()
La línea 17 que dibuja todos los contornos encontrados se va a comentar, ya que como te decía antes, necesitamos cernir todos los contornos para eliminar aquellos que no fueran importantes.
Línea 18: Se recorre cada uno de los contornos encontrados con un for
, ahora se analiza cada contorno (c
).
Línea 19: Se emplea la función cv2.contourArea
, para determinar el área en pixeles del contorno.
Línea 20: Del área encontrada se comparará con 3000
pixeles por ejemplo (pero este valor puede variar de acuerdo a tu aplicación), para solo dejar pasar a los contornos que superen dicho valor, por lo tanto los más pequeños serán descartados.
Línea 21: Se encuentran los momentos del contorno, esto se utiliza para poder encontrar los puntos centrales del contorno en x e y como podemos ver en las líneas 23 y 24. (Debido a que se realiza una división para determinar las coordenadas se establece la línea 22, para que no exista división para cero, por lo que se iguala a 1).
Línea 25: Aquí vamos a dibujar un círculo con cv2.circle
, este va a ser dibujado en frame
, en las coordenadas x e y encontradas, con un radio de 7 pixeles, de color verde que en BGR sería (0,255,0)
, finalmente con -1
especificamos que sea un círculo y no una circunferencia.
NOTA: Estamos empleando cv2.circle
, luego usaremos cv2.putText
, por ello te recomiendo que si tienes un poquito de problemas para entender como funcionan veas el siguiente video:
Línea 26: Como necesitamos visualizar texto, se debe especificar el tipo de funte a utilizar, en este caso cv2.FONT_HERSHEY_SIMPLEX
.
Línea 27: Ahora se utiliza cv2.putText
para visualizar el texto, a esta función le entregamos la imagen en donde se va a visualizar, en este caso frame
, luego el texto que se va a visualizar que serían los valores de x e y, después están las coordenadas en donde se va a ubicar el texto, la fuente que habíamos declarado en la línea 26, el tamaño del texto, el color en BGR (0,255,0)
para verde y finalmente el grosor del texto.
Línea 28: Aquí vamos a usar cv2.convexHull
, para mejorar la visualización del contorno, te dejo el link de los documentos de openCV por si quieres más información sobre esta función. Recuerda que el uso de esta función dependerá de tu aplicación.
Línea 29: Se dibujan los contornos con la función cv2.drawContours
en frame
, el contorno que se va a visualizar es el siguiente argumento, luego como no todos los contornos encontrados por la línea 15 se van a dibujar usamos 0, después el color en el que se va a dibujar que es azul y finalmente el grosor de línea.
Veamos como se visualiza el resultado de todo este proceso:

Figura 4: Detección de un objeto en color azul en donde se ha determinado su contorno, centro y coordenadas.
Detectar varios colores en OpenCV
Ahora que hemos pasado por todo este proceso de detección, ¿qué te parece si optimizamos un poquito el código y detectamos 2 colores más?
Vamos a detectar el color azul, amarillo y rojo, y te darás cuenta que va a ser un proceso similar.

Figura 5: Sección en H donde está presente el color rojo, amarillo y azul.
En la figura 5 he determinados distintos rangos para cada color, recuerda que los valores que he establecido NO son una regla, pueden cambiar acorde a la aplicación, iluminación y color que desees detectar. Veamos la programación:
import cv2 import numpy as np def dibujar(mask,color): _,contornos,_ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in contornos: area = cv2.contourArea(c) if area > 3000: M = cv2.moments(c) if (M["m00"]==0): M["m00"]=1 x = int(M["m10"]/M["m00"]) y = int(M['m01']/M['m00']) nuevoContorno = cv2.convexHull(c) cv2.circle(frame,(x,y),7,(0,255,0),-1) cv2.putText(frame,'{},{}'.format(x,y),(x+10,y), font, 0.75,(0,255,0),1,cv2.LINE_AA) cv2.drawContours(frame, [nuevoContorno], 0, color, 3) cap = cv2.VideoCapture(0) azulBajo = np.array([100,100,20],np.uint8) azulAlto = np.array([125,255,255],np.uint8) amarilloBajo = np.array([15,100,20],np.uint8) amarilloAlto = np.array([45,255,255],np.uint8) redBajo1 = np.array([0,100,20],np.uint8) redAlto1 = np.array([5,255,255],np.uint8) redBajo2 = np.array([175,100,20],np.uint8) redAlto2 = np.array([179,255,255],np.uint8) font = cv2.FONT_HERSHEY_SIMPLEX while True: ret,frame = cap.read() if ret == True: frameHSV = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) maskAzul = cv2.inRange(frameHSV,azulBajo,azulAlto) maskAmarillo = cv2.inRange(frameHSV,amarilloBajo,amarilloAlto) maskRed1 = cv2.inRange(frameHSV,redBajo1,redAlto1) maskRed2 = cv2.inRange(frameHSV,redBajo2,redAlto2) maskRed = cv2.add(maskRed1,maskRed2) dibujar(maskAzul,(255,0,0)) dibujar(maskAmarillo,(0,255,255)) dibujar(maskRed,(0,0,255)) cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('s'): break cap.release() cv2.destroyAllWindows()
El proceso que hemos seguido hasta ahora es el mismo, solo que con más colores, es por eso que en un principio importamos los paquetes necesarios. Pasaremos por alto la función dibujar
por ahora.
En la línea 19 iniciamos el video streaming, mientras que de la línea 21 a la 31 establecemos los rangos en HSV donde está presente el color azul, amarillo y rojo. En la línea 33 determinamos el tipo de fuente que usaremos para visualizar texto en la imagen.
La imagen que vamos a usar para procesar está presente en la línea 36 con frame
, posteriormente en la línea 39 vamos a transformarla de BGR a HSV, entonces de la línea 40 a 44 obtenemos imágenes binarias correspondientes a cada color detectado.
Ahora sí, procedemos con la explicación de la función dibujar
, esta nos pide dos argumentos, el primero es la imagen binaria correspondiente a la detección de cada uno de los colores que estamos detectando, en este caso maskAzul
, maskAmarillo
y maskRojo
. El segundo argumento es un color en BGR, con el cual se van a dibujar los contornos encontrados por cada color. Según se observa en la línea 45, 46 y 47 se dibujarán los contornos en azul (255,0,0)
, amarillo (0,255,255)
y rojo (0,0,255)
.
En la línea 5 se buscan todos los contornos de la imagen binaria que en ese momento haya sido proporcionada, y se estudia cada uno de estos contornos en la línea 7, determinando su área en la línea 8. Si el área encontrada es mayor a 3000 pixeles entonces se continúa con el proceso, caso contrario esto quiere decir que el área es muy pequeña y se descartará.
En las líneas 10 a 13 se está determinando las coordenadas centrales de cada contorno con respecto a la imagen. Finalmente de la línea 15 a 17 se dibuja un círculo correspondiente al punto central del contorno, luego las coordenadas centrales y finalmente el contorno, todo esto se va a dibujar en frame
.

Figura 6: Detección de varios colores con OpenCV y Python
Y hemos llegado al final de este post, recuerda que tienes un video en donde también te explico como realizar este procedimiento. Cuéntame si te ayudo la explicación y si lo probaste. No olvides darle un vistazo a las hojitas de resumen. Nos vemos en el siguiente post.
hola gaby…soy deyvis y sigo cada uno de tus vídeos
bueno gracias por tu dedicación y tu tiempo en cada uno de tus vídeos…
Hola Deyvis, muchas gracias a ti por tus palabras y por seguir mi contenido. Te lo agradezco mucho 🙂
hola gaby tengo error con el codigo , no me corre ayuda porfavor me sale lo siguiente :
Traceback (most recent call last):
File «D:\unp archivos\proyects python\vision artificial\pruebas.py», line 45, in
dibujar(maskAzul,(255,0,0))
File «D:\unp archivos\proyects python\vision artificial\pruebas.py», line 6, in dibujar
cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)
Hola nick, debe ser un inconveniente debido a la versión de OpenCV, seguramente estás usando OpenCV4. Lo que debes hacer es omitir el primer valor que develve cv2.findContours, de este modo: contornos,_ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
Gracias, me pasaba lo mismo. Que horror los cambios por versión de Opencv 🙂
Solo como un aporte.
Yo uso Opencv 4 y python 3.7 en raspberry pi, tuve el siguiente error:
«AttributeError: ‘module’ object has no attribute ‘RETR_EXTERNAl»
mi solucion fue cambiar la siguiente linea por otra, respectivamente
_,contornos,_ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contornos,hierachy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
espero a alguien le ayude y por cierto, muy buen contenido, felicidades.
gracias me funcionó
gracias me salvaste la vid, llevaba rato buscando el porque y era eso 🙂
hola gaby y compañero disculpa a mi me aprecio el mismo error desapareció el error ahí y me salió otro error en esta linea cv2.putText(frame,’Amarillo’,(x-10,y-10),font,0,75,color,2,cv2.LINE_AA) podrían ayudarme por favor
Hola Gaby!! Tengo una duda para que aparte de las coordenadas también me muestre la leyenda del color que es, como puedo hacerlo?
Y en lugar de encerrarlo con un circulo sea con un rectángulo?
Excelentes videos, espero me puedas ayudar.
Hola Aide, para visualizar el color debes usar cv2.putText, y especificas las coordenadas de acuerdo por ejemplo al centro x e y. Si quisieras imprimir tanto los puntos centrales como coordenadas tendrías por ejemplo que restar ‘y’ menos alguna cantidad de pixeles.
Para poder encerrar en un rectángulo puedes usar cv2.boundingRect, en él debes especificar el contorno que se vaya a encerrar. Aquí empleo la función: https://github.com/GabySol/OmesTutorials/tree/master/Movement%20detector%20(subtraction)
cv2.putText(frame,’amarillo’,(x-10,y-10),font, 0.75,(0,255,0),1,cv2.LINE_AA), prodria ser algo así? cuando lo pongo en todos los colores me dice la misma leyenda «amarillo»
Sí, está muy bien, ahora podrías ingresar eso en una función para que se visualice el texto del color que desees. Puedes basarte en la función (‘dibujar’, que está en la programación de este post) creada para encerrar la pelotita roja, azul y amarilla de distinto color, solo que ahora tendrías que hacerlo con el texto, es decir cv2.putText.
gaby eres un amor gracias bb explicas mejor que un magister en ingenieria de la uni sigue adelante buen blog :d.
Hola, excelente tutorial, me sale un error me podrias orientar de favor
Traceback (most recent call last):
File «C:\python\colores.py», line 36, in
dibujar(maskAzul,(255,0,0))
File «C:\python\colores.py», line 5, in dibujar
cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)
Hola Esau, puede que sea un problema con la función cv2.findContours, mira este video: https://youtu.be/R82EcsCgnfg en el minuto 2:30. Debe ser que la versión que tienes de openCV es diferente a la mía.
Muy buenos los videos
Hola buenas , soy un alumno de automatización y rebotica industrial , estoy intentando extraer los datos de las ordenadas de x e y , al estar declaradas dentro del IF solo me deja imprimirlas en la consola , pero a la hora de sacarlo por ejemplo a un bloc de notas me da errores , he puesto un time.sleep(1) de un segundo para así poder adquirir los datos mas lenta mente ya que mi intención es mandar esta información mediante un opc server a un robot ABB , como veras no he tocado mucho python por lo que agradecería su ayuda .
Un saludo
Hola Jonathan, tal vez podrías usar la información de aquí: https://people.sugarlabs.org/ignacio/Python/python+3.pdf Espero que pueda ser útil.
Cómo lo resolvisteis? no me deja abrir el link que le pasaste a Jonathan y es precisamente el mismo problema
El link no está disponible, tengo la misma interrogativa, como guardar las coordenadas de frames distintos en variables?, es decir, por ejemplo en una cinta transportadora, ingresa la pelota de izq a derecha y guardo esos primeros valores y antes de desaparecer quiero guardar también los últimos valores. ¿Cómo podría realizar eso?
Primeramente muchas gracias por este tutorial, estoy realizando algo similar pero con piezas de LEGO. Lo que quiero por el momento es identificarlas por color pero me gustaría también añadir a tu codigo un putText que mencione el color de la pieza.
Me podrias ayudar con algun código similar o algo que me pueda ayudar.
La idea es que vayan pasando por una banda transportadora y que una camara web las identifique para posteriormente almacenarlas en contenedores conforme a su color o forma.
Hola Victor, creo que te podrían ayudar estos posts: http://omes-va.com/contando-por-colores-en-python-opencv/ http://omes-va.com/detecta-figuras-geometricas-y-sus-colores-opencv-python/ para que puedas adicionar el color de cada pieza.
Si estoy trabajando con tu código de detección de figuras pero no lo he podido adaptar a videocapture, me podrias ayudar?
Hola Gaby, primero que nada, muchas gracias por tus tutoriales, era justo lo que necesitaba para meterme en el mundo de la vision artificial. Tengo una duda, sobre unos parametros:
cv2.drawContours(frame, [nuevoContorno], 0, (255,0,0), 3)
Cuando uno utiliza la funcion de dibujar contornos, aun no me queda claro, de porque hay que utilizar corchetes en el nuevo contorno y porque se utiliza el indice 0, se que -1 es para todos, El cero que signfica?
Espero puedas aclararme esa duda, muchas gracias.
Hola Pedro, muchas gracias 😀 El 0 quiere decir que va a tomar el contorno almacenado en la posición cero.
Hola Gaby soy Martin muy bueno tu exposición, me queda una duda, quiero incluir en mi programa un recuadro con la gama de colores que tu presentas en la figura 1 y dibujar allí un rectángulo para seleccionar los colores a utilizar, no se como hacer la figura con la gama se colores, podrías ayudarme? desde ya muchas gracias
Hola Martin muchas gracias :D. Si usas una GUI podrías subirla como una imagen.
Buenas noches a todos, una pregunta: ¿ cómo se crearía el ejecutable o archivo instalable ,para ejecutarse en cualquier máquina, de el proyecto de éste post?
Hola Samuel, muy buena pregunta. Te cuento que no lo he intentado, pero en cuanto lo haga exitosamente haré un tutorial sobre ello, disculpa no tener la info en este momento.
Hola Gaby, te sigo desde hace apenas una semana y estoy completamente enganchado con tus tutoriales porque son prácticos, profundos, agradables y sobre todo extremadamente claros, son lo mejor de lo mejor, el sueño de todo principiante (y admítanlo, aquellos avanzados también ;)) Deseo aportar mi granito de arena en la construcción de esta comunidad de entusiastas que has creado. Praveen ha creado un asombroso script en python (utilizando los conceptos que nos has explicado) para obtener muy fácilmente los rangos HSV del objeto a detectar, sin recurrir a prueba y error, lo que nos ahorrará mucho tiempo. El enlace es el siguiente:
https://medium.com/programming-fever/how-to-find-hsv-range-of-an-object-for-computer-vision-applications-254a8eb039fc
Espero les sea tan útil como a mi.
Saludos desde Colombia!
Hola Carlos, muchas gracias por esas palabras, por este comentario tan bonito. Me anima mucho mucho que te esté siendo útil el contenido que realizo, me pone muy feliz. Muchas gracias por compartir también a la comunidad. Saludos y un abrazo grande desde Ecuador. 😀
Excelente explicacion.
para los que les sale este error:
_,contornos,_ = cv2.findContours(mask, cv2.RETR_EXTERNAL,
ValueError: not enough values to unpack (expected 3, got 2)
La corrreccion es solo quitando el primer parámetro:
contornos,_ = cv2.findContours(mask, cv2.RETR_EXTERNAL,
Y listo, funciona!
Saludos!
Hola Gaby y compañeros
Quisiera saber como escribir el color que detecta en la terminal.
Gracias 😀
Hola Victor, si deseas imprimir el nombre del color detectado puedes definirlo de acuerdo a cierto rango. Te dejo este ejemplo: https://youtu.be/CsS0V6pDsBM
Hola funcionan perfectos los codigos en mi vieja lap asus 901 gracias por tu trabajo y tu tiempo, pero los probe en la rasp y el primero funciona bien pero los demas me da este error
Traceback (most recent call last):
File «/home/pi/Desktop/opencv funcina/contorno.py», line 13, in
cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)
Tu probaste tus programas los de contorno en la rasp? saludos y gracias
Hola Vlad, puede que tengas esos errores por la versión de OpenCV que tienes instalado en la raspberry. Asumo que tienes instalado OpenCV 3, por lo que la función cv2.findContours devuelve 3 valores y no 2 como en versiones más recientes de la librería. Te dejo este post para que puedas remediar el error: http://omes-va.com/error-cv2-findcontours/
Espero sea de ayuda, saluditos. 😀
Hola Gaby, antes de nada, muchas gracias por compartir tus conocimientos y hacer que sean más fáciles de entender. Te cuento , estoy empezando con Opencv y tengo muchas dudas como es habitual cuando empiezas con algo nuevo. Me gustaría hacer un pequeño programa que me dijera los valores rgb de la imagen que estoy tomando en vivo, para después compararla con un patrón y ver la diferencia, en definitiva, quiero comparar colores entre mismo aroma, para ver cuanto ha variado. He seguido tus videos y no he visto algo parecido, podrías indicarme, si no te importa, donde podría ver esto, o si eres tan amable, si tienes algún ejemplo .
Muchas gracias por leerme y recibe un saludo y felicitaciones por tus videos de las Islas Canarias,
carlos
Hola Carlos, muchas gracias :). No sé si entiendo bien lo que necesitas realizar, si es que de la imagen que tomas en vivo es de un solo color, o tienes que analizar cada pixel o en rgb los valores que más se repitan. Me puedes aclarar esa duda?
hola gaby y compañero disculpa a mi me aprecio el mismo error desapareció el error ahí y me salió otro error en esta linea cv2.putText(frame,’Amarillo’,(x-10,y-10),font,0,75,color,2,cv2.LINE_AA) podrían ayudarme por favor
Hola Carlos, qué error obtienes?
Hola gaby, estoy haciendo mi tesis y me ha servido de mucho tu información, que genial.
Ahora me hice fan de tus videos
Hola Alan, muchas gracias por darte el tiempo de escribir un comentario. Me alegra mucho saber que la información del blog te sea útil. 🙂
Hola buenas, estoy intentando usar este código para una imagen, que tendría que poner en el cap. release en este caso?
hola estan bien buenos tus tutoriales quisiera saber como calcular el diametro de los pelotillas para añadirle al codigo gracias