🧮 Contando por COLORES en Python-OpenCV

Поділитися
Вставка
  • Опубліковано 26 жов 2024

КОМЕНТАРІ • 39

  • @OMES-va
    @OMES-va  4 роки тому +7

    Hola, hola! 🙋‍♀️, te dejo el código y tutorial de este video en mi web: omes-va.com/contando-por-colores-en-python-opencv/
    👩‍💻 ¡Héchale un ojo! 👨‍💻

  • @OMES-va
    @OMES-va  5 років тому +2

    En la descripción tienes la información de cada sección del video en los minutos en los que aparece, para que no pases tiempo si ya quieres ver algo en específico. 👍👍👍
    No olvides seguirme en mis redes sociales.
    ¡Sigamos aprendiendo JUNTOS! 🧐

    • @dilanalejandroantezanaserr6528
      @dilanalejandroantezanaserr6528 5 років тому

      una pregunta el mismo procedimiento si lo quiero hacer en java como se podria hacer

    • @OMES-va
      @OMES-va  5 років тому

      @@dilanalejandroantezanaserr6528 Hola Dilan, tendrías que buscar los comandos para java, deben ser similares y su funcionamiento también :)

    • @dilanalejandroantezanaserr6528
      @dilanalejandroantezanaserr6528 5 років тому +1

      @@OMES-va si muchas gracias ya encontre los comandos

  • @FernandOrsa
    @FernandOrsa 3 роки тому +1

    Buenísimo video Gabi.
    Sólo para complementar lo compartido para los que recién se inician, es que tengan cuidado con la función drawContours y la versión de Open CV que utilicen 😉

  •  3 роки тому

    Gaby, excelente video.

  • @juanantonioandaluz
    @juanantonioandaluz 3 роки тому +1

    Buenas.. una pregunta...
    En vez de un contador se podría poner una especie de reloj con más o menos porcentaje de color verde o de color rojo?
    Si sale más verdes que se vaya la aguja hacia el lado verde.
    Me gustaría contactar contigo para un proyecto, no me importa pagarte, es importante. Gracias

  • @venegaschaireshectoraram7187

    Funciona para imágenes con más de un tipo de figura? Es decir, no solo círculos.

  • @josemiguelc.tasayco4028
    @josemiguelc.tasayco4028 3 роки тому

    Hola,Me suscribí a tu canal y pronto a unirme tu blog porque lo mereces, sin embargo tengo una pregunta... como sería para el incoloro ? Necesito detectar botellas de plástico pet pero no sé como se daría si es el caso para PET INCOLORO. Gracias por tu tiempo

  • @Agronomistapolo
    @Agronomistapolo 4 роки тому

    Muy interesante tu video Gabi. Cómo puede acceder al rango real de la imagen en HSV, ya que la gráfica que tu utilizas es ideal cuando el background es uniforme. Sin embargo, cuando hay brillos no es tan fácil encontrar el umbral.

    • @OMES-va
      @OMES-va  4 роки тому

      Hola Enrique, podrías usar trackbars para determinar los rangos en tiempo real. En este video puedes encontrar como realizarlos: ua-cam.com/video/4tWQFboP5kQ/v-deo.html

  • @ivanalejandroanzaldobaca3218
    @ivanalejandroanzaldobaca3218 3 роки тому

    Hola buenisimos tus videos!, tengo una duda si quisiera detectar el color blanco que rangos del HSV e estado usando blancoBajo = np.array([0, 0, 255], np.uint8)
    blancoAlto = np.array([180, 100, 255], np.uint8) pero no me lo detecta

  • @ianaya2643
    @ianaya2643 3 роки тому

    en el minuto 8:10 no me permite aplicar el dibujarContorno y lo deja como un simple texto

  • @jhongesell
    @jhongesell 3 роки тому

    Hola estoy ejecutando tu script en Spyder desde un entorno virtual que trabajé con Anaconda, aunque se ejecuta observo que en la consola imprime este mensaje:
    QObject::moveToThread: Current thread (0x561a2d40f7d0) is not the object's thread (0x561a2ca164d0).
    Un mensaje similar o igual me salía cuando ejecutaba la guía de detección de figuras, solo que se quedaba trabado en la primera figura; mi consulta sería si estoy fallando en cuanto al uso de OpenCV ya que al hacer la consulta en mi terminal entiendo que tengo cv4; imagino es por ello el error que me va saliendo; así mismo en otros enviroments creo hay conflicto de librería con PyQT5?, al menos eso pensaba podía ser, por eso en un nuevo env tengo solo openCV. Esa en mi inquietud, me gustaría tener un script para detectar poligonos donde pueda obtener valores de sus parámetros como perimetro y área; estoy investigando en cuanto a ello. Si me podrías orientar sería fabuloso, gracias de antemano por tu tiempo a leer mi comentario.

  • @lokothedelTec
    @lokothedelTec 5 років тому

    muy bueenooo !!!!!

  • @electrikvocal9590
    @electrikvocal9590 3 роки тому

    Disculpa una consulta, en caso de hacer la identificación en video donde debería colocar un ciclo while y con que condición de identificación de colores ?
    De momento esta asi, pero me da error:
    import cv2
    import numpy as np
    def dibujarContorno(contornos, color): #Como argumento recibe el contorno del color que sea y el color en BGR
    for (i, c) in enumerate(contornos):
    M = cv2.moments(c)
    if(M["m00"] == 0): M["m00"] == 1
    x = int(M["m10"] / M["m00"])
    y = int(M["m01"] / M["m00"])
    #Visualizo cada contorno en c
    cv2.drawContours(cap, [c], 0, color, 2)
    #Ponemos un centro de dicho contorno con cv2.putText
    # usamos i+1 ya que no queremos que empiece a contar por 0
    cv2.putText(cap, str(i + 1), (x - 10, y + 10), 1, 2, (0, 0, 0), 2)
    #Para determinar los valores de H es gyuw4.png que esta en References
    amarilloBajo = np.array([ 20, 100, 20], np.uint8)
    amarilloAlto = np.array([ 32, 255, 255], np.uint8)
    violetaBajo = np.array([130, 100, 20], np.uint8)
    violetaAlto = np.array([145, 255, 255], np.uint8)
    verdeBajo = np.array([ 36, 100, 20], np.uint8)
    verdeAlto = np.array([ 70, 255, 255], np.uint8)
    rojoBajo1 = np.array([ 0, 100, 20], np.uint8)
    rojoAlto1 = np.array([ 10, 255, 255], np.uint8)
    rojoBajo2 = np.array([175, 100, 20], np.uint8)
    rojoAlto2 = np.array([180, 255, 255], np.uint8)
    #Pongo estos rangos previo a la lectura de la imagen porque si quisieras usar este code para un video podrias hacerlo antes del while
    # ya que solo sera necesario leerlos una vez
    #imagen = cv2.imread('lunares.png') #Carga imagen en BGR por defecto
    cap = cv2.VideoCapture(0) #Captura de video streaming
    while True:
    ret, frame = cap.read()
    if ret == True:
    frameHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    #Detectando colores
    maskAmarillo = cv2.inRange(frameHSV, amarilloBajo, amarilloAlto)
    maskVioleta = cv2.inRange(frameHSV, violetaBajo, violetaAlto)
    maskVerde = cv2.inRange(frameHSV, verdeBajo, verdeAlto)
    maskRojo1 = cv2.inRange(frameHSV, rojoBajo1, rojoAlto1)
    maskRojo2 = cv2.inRange(frameHSV, rojoBajo2, rojoAlto2)
    maskRojo = cv2.add(maskRojo1, maskRojo2) #Sumo las 2 imagenes
    # Encontramos contornos con cv2.findContours() que devolvera 3 variables
    # OpenCV 3
    # contornosAmarillo = cv2.findContours(maskAmarillo, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
    # contornosVioleta = cv2.findContours(maskVioleta, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
    # contornosVerde = cv2.findContours(maskVerde, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
    # contornosRojo = cv2.findContours(maskRojo, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
    # OpenCV 4
    contornosAmarillo = cv2.findContours(maskAmarillo, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
    contornosVioleta = cv2.findContours(maskVioleta, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
    contornosVerde = cv2.findContours(maskVerde, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
    contornosRojo = cv2.findContours(maskRojo, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
    # LLamo a la funcion dibujarContorno() para visualizar los resultados
    dibujarContorno(contornosAmarillo, (0, 255, 255))
    dibujarContorno(contornosVioleta, (140, 40, 120))
    dibujarContorno(contornosVerde, (0, 255, 0))
    dibujarContorno(contornosRojo, (0, 0, 255))
    '''
    #Esto lo tengo comentado de momento
    # Imagen Resumen para que no sea tan confuso, usando numpy (OPCIONAL)
    imgResumen = 255 * np.ones((210, 100, 3), dtype=np.uint8) # Esta imagen en un principio estara en blanco (255)
    # Agregamos circulos correspondientes a cada color
    cv2.circle(imgResumen, (30, 30), 15, (0, 255, 255), -1)
    cv2.circle(imgResumen, (30, 70), 15, (140, 40, 120), -1)
    cv2.circle(imgResumen, (30, 110), 15, (0, 255, 0), -1)
    cv2.circle(imgResumen, (30, 150), 15, (0, 0, 255), -1)
    # Ponemos el numero total encontrado por cada color con cv2.putText()
    cv2.putText(imgResumen, str(len(contornosAmarillo)), (65, 40), 1, 2, (0, 0, 0), 2)
    cv2.putText(imgResumen, str(len(contornosVioleta)), (65, 80), 1, 2, (0, 0, 0), 2)
    cv2.putText(imgResumen, str(len(contornosVerde)), (65, 120), 1, 2, (0, 0, 0), 2)
    cv2.putText(imgResumen, str(len(contornosRojo)), (65, 160), 1, 2, (0, 0, 0), 2)
    # Sumamos todos los circulos de todos los colores y visualizamos
    totalCnts = len(contornosAmarillo) + len(contornosVioleta) + len(contornosVerde) + len(contornosRojo)
    cv2.putText(imgResumen, str(totalCnts), (55, 200), 1, 2, (0, 0, 0), 2)
    cv2.imshow('Resumen',imgResumen) # Imagen resumen con la cantidad de amarillo, violeta, verde y rojo encontrados, ademas de su totalidad

    '''
    if cv2.waitKey(1) & 0xFF == ord('s'):
    break
    cv2.release()
    cv2.destroyAllWindows()

    • @electrikvocal9590
      @electrikvocal9590 3 роки тому

      Este es el error:
      Traceback (most recent call last):
      File "C:/Users/PC0/Desktop/OpenCV Project/Contando_por_COLORES/countColour_Videos.py", line 69, in
      dibujarContorno(contornosAmarillo, (0, 255, 255))
      File "C:/Users/PC0/Desktop/OpenCV Project/Contando_por_COLORES/countColour_Videos.py", line 15, in dibujarContorno
      cv2.drawContours(cap, [c], 0, color, 2)
      TypeError: Expected Ptr for argument 'image'
      [ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-oduouqig\opencv\modules\videoio\src\cap_msmf.cpp (434) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
      La verdad no se me ocurre que hacer :(

    • @OMES-va
      @OMES-va  3 роки тому +1

      Hola ElectrikVocal 95, en este video puedes encontrar la detección de colores en video: ua-cam.com/video/CFuyXw-pfPY/v-deo.html Podrías combinarlo con este videotutorial. En cuanto al error que obtienes, puede que sea por el primer argumento en cv2.drawContours, allí tendrías que ubicar el fotograma que se esté analizando, comúnmente llamado frame.

    • @electrikvocal9590
      @electrikvocal9590 3 роки тому

      @@OMES-va Muchas gracias por responder. Saludos

  • @arturo3139
    @arturo3139 3 роки тому

    muy buen video, una consulta como obtendría el blanco? si tengo una imagen con fondo blanco y quisiera que solo el blanco salga con que combinación sería?

    • @OMES-va
      @OMES-va  3 роки тому +1

      Hola Arturo, en ese caso usaría umbralización simple. ua-cam.com/video/pPcuzYqPMhE/v-deo.html

  • @katiapaolafernandezmedina5855
    @katiapaolafernandezmedina5855 4 роки тому

    Hola , estoy utilizando este programa con vídeo cámara , pero tengo problemas con la parte de la (imgResumen), no me aparece el resultado de cada color que se da en el momento , quisiera saber si el código varia cuando se utiliza la cámara y que código puedo utilizar para mostrar mis resultados del conteo de colores ,gracias

    • @OMES-va
      @OMES-va  4 роки тому

      Puede ser un poco diferente, pero podrías mostrar los resultados en el mismo frame. Para visualizar el texto en ese caso puedes usar cv2.putText y para que no se sobreescriban los resultados en el segundo argumento podrias usar .format.

  • @dannysalgado7727
    @dannysalgado7727 5 років тому

    Excelente video inge... puede hacer uno de como cargar opencv en una raspberry... gracias!!!

    • @OMES-va
      @OMES-va  5 років тому

      Hola Danny. Puedes instalarlo con este turorial. Te lo recomiendo 🙂
      www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/

  • @juancarlosguevara5167
    @juancarlosguevara5167 4 роки тому

    Buenas noches
    Primer quería darte las gracias por brindar tu conocimiento, de verdad es de mucha ayuda
    Tengo una pregunta quiero realizar algo parecido, pero quisiera saber como se podría identificar si el color que tiene la imagen esta en un rango determinado.
    Disculpa la ignorancia algo así, :
    if cv2.inRange(imagenHSV, amarilloBajo, amarilloAlto):
    print(‘Esta en el rango’)
    else:
    print(‘No esta en el rango’)

    • @OMES-va
      @OMES-va  4 роки тому

      Hola Juan Carlos muchas gracias por el ánimo, me alegra mucho que el contenido esté siendo útil :) . Creo que te constesté en mi blog, lo replico aquí también. Lo que podrías hacer es analizar la imagen que te da de vuelta cv2.inRange(imagenHSV, amarilloBajo, amarilloAlto), ya que esta será una imagen a blanco y negro, donde el blanco representará la presencia de dicho color (según el rango que hayas establecido), mientras que en negro se mostrarán las áreas donde no esté presente. Podrías también tomar las posiciones del área en blanco para de la imagen de entrada (imagen a color), obtener los valores contenidos en los pixeles.

  • @JoseRivera-jw2tc
    @JoseRivera-jw2tc 4 роки тому

    Esta muy bueno pero trato de replicarlo con pyc y algo no me permite compilarlo bueno seguiré intentando gracias por compartir tus conocimientos

  • @CarlosRamirez-py5wq
    @CarlosRamirez-py5wq 3 роки тому

    cual seria el rango para color gris??

  • @iAndTouch
    @iAndTouch 4 роки тому

    Hola, muchísimas gracias por tu increíble conocimiento 😯 Una pregunta ¿Cómo podría mostrar los resultados del rango obtenido en un print?

    • @OMES-va
      @OMES-va  4 роки тому

      ¿Me explicas un poquito más?

    • @iAndTouch
      @iAndTouch 4 роки тому

      OMES Muchas gracias por la atención. En realidad, bueno, quisiera saber si es posible obtener en un array, string o mostrar en la terminal los valores HSV obtenidos de la imagen en cuestión. No sé si esté hablando de otro tema, pero quisiera saber si es posible

    • @OMES-va
      @OMES-va  4 роки тому

      Emm, podrías obtener las posiciones del área blanca correspondiente al color detectado. Con esas coordenadas puedes buscar los valores de la imagen en HSV. Espero que sea de ayuda Pablo. :)

  • @pablogiri812
    @pablogiri812 4 роки тому

    Hola muy bien vídeo, como podría hacer para saber el aérea que ocupa un color en una imagen?

    • @OMES-va
      @OMES-va  4 роки тому

      Puedes usar la función cv2.contourArea. Te dejo el link para que le des un vistazo: docs.opencv.org/trunk/dd/d49/tutorial_py_contour_features.html

    • @pablogiri812
      @pablogiri812 4 роки тому

      @@OMES-va Gracias a vos empecé el curso en Cursera. MUCHAS GRACIAS!!!!!

    • @OMES-va
      @OMES-va  4 роки тому

      Espero que te sea de ayuda Pablo, a mi me ayudó mucho sobre todo para mi tesis. :)