👨‍💻 CONTORNOS y como DIBUJARLOS en OpenCV y Python

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

КОМЕНТАРІ • 97

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

    ¿Quieres el tutorial en texto con su programación?🤔, si la respuesta es SÍ 👌, dale clic: omes-va.com/contornos/

  • @giacomobianchi3886
    @giacomobianchi3886 4 роки тому +4

    Soy brasileño y no sé nada de programación, sus videos son los únicos que me hacen entender sobre el tema. ¡No puedo encontrar ningún otro tutorial en inglés o portugués, tan bueno como el suyo! Felicitaciones por lo trabajo

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

      Hola Giacomo Bianchi, muito obrigada. Gracias por tus palabras, de verdad que me animan muchísimo. :D

  • @derkertherblack6177
    @derkertherblack6177 4 роки тому +1

    Cuanta dedicación en cada video, me encantan todos, muchas gracias

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

      Muchas gracias Derkerther Black! :D

  • @darklaker
    @darklaker 4 роки тому +1

    ¡Gracias por tus videos!, creo que no hay tantos tan bien explicados. Dentro de los temas que mas me apasionan son la visión computacional, la inteligencia artificial y la realidad virtual.

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

      Muchas gracias Arturo. :)

  • @Arkaitz.M.A
    @Arkaitz.M.A 6 місяців тому

    Buen video.
    Tan solo unas apreciaciones que se pueden ver si mantenemos el ciclo for con los distintos métodos:
    # CASO 1: cv2.CHAIN_APPROX_SIMPLE Y cv2.RETR_LIST:
    Primero se ha encontrado el circulo, luego los de las figuras interiores del cuadrado de la izquierda.
    Después el contorno interior del cuadrado de la izquierda y, posteriormente su borde exterior.
    Por último hace lo mismo pero en el cuadrado de la derecha. Figura interior, borde interior, borde externo
    # CASO 2: cv2.CHAIN_APPROX_SIMPLE Y cv2.RETR_EXTERNAL:
    Primero dibuja el circulo, luego el cuadrado externo izquierdo y, finalmente el cuadrado externo derecho
    # CASO 3: cv2.CHAIN_APPROX_SIMPLE Y cv2.RETR_CCOMP
    Primero se ha encontrado el circulo, luego los de las figuras interiores del cuadrado de la izquierda.
    Después el contorno exterior del cuadrado de la izquierda y, posteriormente su borde interior.
    Por último hace lo mismo pero en el cuadrado de la derecha. Figura interior, borde exterior, borde interno
    # CASO 4: cv2.CHAIN_APPROX_SIMPLE Y cv2.RETR_TREE
    Primero se ha encontrado el circulo, el contorno exterior del cuadrado de la izquierda y, posteriormente su borde interior. Después luego los de las figuras interiores del cuadrado de la izquierda. Por último hace lo mismo pero en el cuadrado de la derecha. Borde exterior, borde interno, figura interior

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

    Muy buena explicación, estoy detectando las articulaciones del brazo mediante marcas de color para modelar su trayectoria y evaluar los gestos con fines de rehabilitacion y me han ayudado estos videos y tu canal en general, saludos y felicidades.

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

      Muchas gracias Samuel, hice algo similar hace algún tiempo pero en extremidades inferiores jeje :D Gracias por darte el tiempo de escribir, lo aprecio mucho!

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

      @@OMES-va Gracias a ti

  • @jp_ct
    @jp_ct 11 місяців тому +1

    For the last opencv version, line 8/9 uses only two variables: contornos, hierarchy = cv2.findContours(
    threshold, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

  • @viccjurado
    @viccjurado 4 роки тому +1

    Que genia, me estas salvando el cuatrimestre XD !!!

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

      jeje, muchas gracias Victor.

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

    Estoy comenzando a aprender Python; estoy interesado en el área de procesamiento de imágenes. Gracias por tus videos.

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

      Me alegra mucho saber eso! Qué bonito saber que muchas personas nos interesamos por esta área :D Muchos éxitos!

  • @hoat23
    @hoat23 4 роки тому +1

    Excelente explicación!!!!

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

      Muchas gracias Deiner!

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

    Que interesante. Excelente tu contenido, me ha sido muy útil.

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

      Muchas gracias Cristian :D me alegra mucho que te haya servido el contenido.

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

    Muy buen tutorial muy bien explicado, excelente vídeo me suscribo

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

      Muchas gracias Carlos 😊 bienvenido!

  • @rafaochoa3896
    @rafaochoa3896 3 роки тому +3

    Hola, una pregunta, ¿hay manera de dibujar puntos en el contorno y extraer sus coordenadas de dichos puntos?
    Investigué sobre eso y existe una propiedad que se llama "puntos extremos" pero solo te permite dibujar 4, me interesa dibujar más de 4.

  • @anghelofierro6971
    @anghelofierro6971 Місяць тому

    Existe una manera de describirlo en una funcion o operacion matematica la funcion de CHAIN_APPRX_NONE y CHAIN_APPROX_SIMPLE?

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

    Geniaaaa

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

    Hola! Algún día podrías realizar una explicación acerca de cómo poder llevar a cabo el contorneado y dibujado de los mismo en tiempo real (en tiempo real o cámara). Mil mil gracias!!!

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

      Hola Mariel, puedes ver algunos videos en el que aplico los contornos en videostreaming: ua-cam.com/video/kcmJQzu_q6M/v-deo.html y este omes-va.com/deteccion-de-colores2/

  • @cesarenriquevillarguerra8270
    @cesarenriquevillarguerra8270 2 роки тому

    Bueno el vid! deje el like, Una pregunta ppor favor: cual seria EL CODIGO para grabar/obtener los puntos para despues dibujarlos en AUTOCAD?

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

    Muchas gracias por tus videos

  • @stevenrojasguerrero8884
    @stevenrojasguerrero8884 Рік тому

    como puedo implementaar la tecnica de contornos, pero para la deteccion y conteo de ojos de una imagen?

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

    Hola , muy buen tutorial. Tengo una duda : lo que pasa es que estoy guardado el contorno de una imagen en dos arreglos x, y , para ubicar luego los puntos y gratificarlos con plot, pero resulta que el contorno sale girado hacia un lado o incluso al revés ¿sabes en qué orden o cómo da el contorno la función que utilizas para que así al guardarlo en otra variable y gratificarlo quede derecho? gracias

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

      Hola Sandra, tal vez sean las coordendas. En el caso de OpenCV toma como origen la parte superior izquierda, a la derecha sería 'x' y abajo 'y'.

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

    Hola, una consulta, con OpenCV podría dibujar el contorno del cuerpo humano? ya que la idea es que se haga seguimiento del cuerpo y ver la colisión con otros objetos (objetos 3d impresos por pantalla). Ojala me ayudes con mi duda y muchas gracias por tus videos

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

      Hola Totus Programing muchas gracias. :) Dependería del ambiente donde funcionaria el programa. Podrías darle un vistazo a estos videos:
      - ua-cam.com/video/kcmJQzu_q6M/v-deo.html
      - ua-cam.com/video/fR7IQQJJAnk/v-deo.html
      - ua-cam.com/video/w-Z-l-BDsXg/v-deo.html

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

      @@OMES-va sería desde una página web, aún nose si lo lograré, pero lo intentaré 😅 estoy introduciéndome en el mundo de Python 🤭 pero con tus vídeos seguro serán un gran aporte muchas gracias 🥰❤

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

    Hola Gaby ! Abra algún método el cual, en base a los contornos, pueda segmentar una imagen en varias partes? Muy explicativos tus videos sigue así!

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

      Hola Simon, si quisieras únicamente trabajar con el área que rodea los contornos, podrías usar c2.bitwise_and(imagen, imagen, mask=mask), allí obtendrás una imagen, en donde se muestre en color el área que has determinado, y de color negro el fondo. Muchas gracias, espero que te hayan ayudado los videos!

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

      Hola Gaby
      Gracias por tus vídeos
      Me encuentro realizando un algoritmo en Raspberry pi 3 y opencv en Python
      Para no videntes
      Para que se puedan desplazar por las calles
      Es decir que el algoritmo les tiene que avisar si hay vehículos cerca
      Calles banquetas etc
      Ya casi lo termino
      Talves me puedas ayudar
      Gracias

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

      @@Stacio6 hola cómo estás? Podrías usar mapas de disparidad para ello necesitarías de 2 cámaras y con los mapas podrías darte cuenta cual es el objeto u objetos más próximos.

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

    Hola mira te explico estoy realizando mi tesis para reconocimiento de objetos y contarlos en este caso vehículos en donde pasan por un túnel de 1 acceso entonces quiero utilizar las cámaras lados norte y sur para detectar presencias de objetos contar cuantos objetos los sume y los totalice y esa información enviarlos a la otra cámara del sector sur para que compare y active semáforo verde desde un extremo y rojo en el otro para los accesos pero he visto muchos tutoriales y vídeos pero ninguno llega a algo cercano o mas bien concreto todos manejan distintas versiones de los programas y las compatibilidades han sido re-jodidas....y lamentablemente tengo poco tiempo para hacerlo y ya me he desvelado mucho...y como trabajo en el día es cada vez mas difícil realizarlo....si me puedes orientar por favor solo necesito algo super simple encender alumbrado con movimiento al detectar un objeto en la cámara y aparezca solo el contorno o varios contornos...

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

      Si quisieras hacer algo simple podrías usar resta de imágenes. Allí solo cuando están en movimiento se detectarian los autos. Sin embargo ese método se complica por los cambios de iluminación. Pero depende de las condiciones que hayas plateado. Si quisieras podrías plantear esto de la resta, previo aplicar ecualización de imágen para atenuar la iluminación.
      Por otro lado si decides aplicar detección de objetos junto con machine learning deberás tomar muchas imagenes de los autos en el entorno donde estes trabajando, y deberías emplear alguna técnica de clasificación para diferenciar autos del fondo, ese es un proceso un poco más complicado.

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

    Hola que tal, antes que nada, excelente explicación y vídeo :D
    Tengo un problema, en una imagen tengo muchos contornos, muchas figuras, ¿Cómo puedo seleccionar una en específico para poder procesar ese contorno ignorando todos los demás?

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

      Hola Rafa, podrías descartar los contornos según su área, para ello puedes usar cv2.contourArea. Existen otras formas, como en base a la forma o al color por ejemplo. O incluso podrías usar todos estos aspectos para diferenciar un contorno de otro. Te dejo algunos de mis videos en caso de que te puedan ayudar con la duda: ua-cam.com/video/R82EcsCgnfg/v-deo.html ua-cam.com/video/DwPug0V8pcI/v-deo.html ua-cam.com/video/wBPIAGNTFzY/v-deo.html :)

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

    hola gaby podrias hacer un ciclo for el cual abra 10 imagenes de una carpeta y al resultado se le aplique la deteccion de contornos y este resultado se guarde en una carpeta por favor me ayudaria muchisimo

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

    Tengo un problema cuando ejecuto el script, me muestra esto:
    line 7, in
    img,contornos,hierarchy=cv2.findContours(th,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
    ValueError: not enough values to unpack (expected 3, got 2). Como puedo solucionar este problema

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

      Hola Normi, debe ser por la versión de OpenCV que posees, yo lo hice con OpenCV3, me supongo que debes tener OpenCV4, pero no te preocupes, solo debes omitir 'img'. De este modo:
      contornos,hierarchy=cv2.findContours(th,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

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

      @@OMES-va Gracias lo he logrado solucionar

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

      Me alegra mucho Normi :D

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

      @@OMES-va Disculpa como podría instalarme OpenCV3?

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

    Hola, esto es para imagenes con fondo negro, si tenes q hacer con fondo de varios colores o fondos variables?

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

      Necesitas discriminar el área de tu interés de alguna manera, con umbralización, detección de bordes, o basándose en el color del objeto que necesites, de tal modo que el objeto que quiera encerrar quede en blanco y el resto en negro.

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

    hola, si quiero identificar el contorno de un objeto especifico pero en un video como lo puedo hacer? muchas gracias por el video.

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

      Hola Alexander, sería el mismo procedimiento solo que lo tendrías que aplicar a un fotograma. En este video por ejemplo uso cv2.findContours en un video: ua-cam.com/video/kcmJQzu_q6M/v-deo.html

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

      @@OMES-va gracias. Ya lo voy a ver.

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

    Pero como hago si deseo capturar solamente los contornos de las llantas de un auto por ejemplo?

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

      Hola pr0 Saksa, tendrías que aplicar alguna técnica para determinarlo. Te dejo por ejemplo este video: ua-cam.com/video/8rg_qi8mjjk/v-deo.html en donde determinamos la placa de un auto.

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

    Holaaa, ¿Cómo podría obtener el área que se encuentra dentro del contorno?

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

      Hola Oscar, puedes usar cv2.contourArea.

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

      @@OMES-va oh, ok, me daría la cantidad de píxeles dentro del contorno, cierto?

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

    excelente, no tendras un tutorial de como hacer un efecto painting o oil para imagenes

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

      Hola Jose, por ahora no cuento con un tutorial así. Saludos!

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

      @@OMES-va ok muchas gracias por responder

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

    Hola, ¿me podrías ayudar? no me compila los cog en subline. solo me aparece error. (con las imágenes)

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

      Hola Duvan, ¿cuál es el error?

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

      @@OMES-va ¡Muchas gracias por responder!
      Ok... mira (es la primer vez que utilizo subline, python) por lo general siempre ha sido matlab.
      El error es en la línea 4 en el imshow
      File "ubicación del archivo", línea 4, in
      (Pensé que era por la ubicación, entonces no coloqué el nombre de la imagen en imread si no, la ubicacion como tal. Y cuando lo hago así, me aparece el error arriba.
      (Sí, esta en la misma carpeta la imagen en jpg)
      Py 3.8
      Cv 4.2

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

      ¿Seguiste tal vez este tutorial? ua-cam.com/video/FqZkSXJfcic/v-deo.html

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

      @@OMES-va sí, seguí ese mismo. ¿como ejecutas tu código? ¿por consola?

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

      @@duvancaceres6368 por el cmd o por ctrl+B. Si puedes pon el código y el error que obtienes 🙂

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

    Hola! Tus videos me han sido una gran guía, pero estoy aplicando este procedimiento y cuando grafico no me dibuj los contornos ¿Podrías ayudarme?

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

      Hola Natalia, muchas gracias :) Claro dime que obtienes?

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

      @@OMES-va yo estoy escribiendo la función drawContours con sus parámetros pero no me retorna en la imagen los contornos.

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

      @@nataliamolina1767 y te salta algún error? Qué versión de OpenCv tienes instalado?

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

      @@OMES-va Mi versión de OpenCV es la 3.4.8. El código no me arroja errores, pero tampoco sé si realmente se está detectando correctamente algún contorno. Al final cuando intento mostrar la imagen no me aparece nada dibujado.

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

    Podrias hacer uno de formas, para detectar y cortar?

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

      Hola SuperDarku, de figuras geométricas?? y como contar o cortar? a eso te refieres?

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

      @@OMES-va osea por ejemplo supongamos que tienes 4 rectángulos en una imagen un rectángulo verde, otro rojo, otro azul y otro amarillo, o bien podrían ser del mismo color, lo que quiero hacer es detectar cada rectángulo y recortarlos y ponerlos cada una en una imágenes por separado, osea apartir de la imagen original obtener 4 imágenes nuevas, me entiendes ahora?

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

      @@SuperDarku podrias usar canny para diferenciar los objetos de una imagen. Si hice un video de conteo de objetos a través de canny o detección de bordes. Puedes aplicar eso y luego recortalos de la imagen principal con cv2.boundingRect, guardabdo cada uno con cv2.imwrite

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

      @@OMES-va lo voy a intentar, muchas gracias señorita

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

      @@OMES-va una última pregunta, que versión de Python y opencv está usando actualmente? Tengo algunos problemas y creo que es por la versión que tengo instalada

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

    excelente

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

    por qué no haces un programa que detecte a gente que usa cubrebocas y gente que no y que se ponga en rojo cuando no lo usen

  • @deinyspulido4902
    @deinyspulido4902 Рік тому

    Hola Gaby estoy siguiendo este tutorial pero me esta dando un error a la hora de correrlo, en la linea donde va la parte de findContours. Me sale este error y no le consigo el problema es exactamente como lo escribiste y esta en la teoria.
    import cv2 as cv
    import numpy as np
    imagen = cv.imread('Foto.png')
    gray = cv.cvtColor(imagen, cv.COLOR_BGR2GRAY)
    _,th = cv.threshold(gray, 100, 255, cv.THRESH_BINARY)
    img,contornos,hierarchy = cv.findContours(th, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
    cv.drawContours(imagen, contornos, -1, (0,255,0), 3)
    cv.imshow('th', th)
    cv.imshow('imagen', imagen)
    cv.imshow('img', img)
    cv.waitKey(0)
    cv.destroyAllWindows()
    Este es el error que me da:
    img,contornos,hierarchy = cv.findContours(th, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
    ValueError: not enough values to unpack (expected 3, got 2)

    • @OMES-va
      @OMES-va  Рік тому

      Hola @deinyspulido4902, esto es por la versión de OpenCV que posees. Pero no te preocupes, puedes resolverlo con esto: omes-va.com/error-cv2-findcontours/ :)

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

    hola gaby podrias hacer un ciclo for el cual abra 10 imagenes de una carpeta y al resultado se le aplique la deteccion de contornos y este resultado se guarde en una carpeta por favor me ayudaria muchisimo