Detección de Objetos con OpenCV y Python (CÓDIGO)

Este es el código que tanto esperabas... No olvides suscribirte a mi canal de YouTube: Alex7 Tutoriales



***************************************************************************

#importacion de modulos

import cv2
import numpy as np

#creamos el objeto de video (camara)
captura=cv2.VideoCapture(0) #Si no te abre la camara prueba con 1 o 2 u otros

while True:
        #capturamos frame a frame
        (grabbed,image) = captura.read()
        #si hemos llegado al final del video salimos
        if not grabbed:
            break

        #1.Conversion a Escala de Grises
        gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
        #cv2.imshow("Escala de Grises sin filtro",gray)
        gray=cv2.GaussianBlur(gray,(3,3),0)
        #cv2.imshow("Escala de Grises",gray)

        #2.Deteccion de bordes
        edged=cv2.Canny(gray,50,150)
        #cv2.imshow("Edged",edged)

        #3.Operaciones Morfologicas Cierre
        kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
        closed=cv2.morphologyEx(edged,cv2.MORPH_CLOSE,kernel,iterations=2)

        cv2.imshow("Closed",closed)

        #4.Encontrar contornos
        _,cnts,_=cv2.findContours(closed.copy(),
                          cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
        #print "contornos",len(cnts)
        
        total=0
        for c in cnts:

                area=cv2.contourArea(c)
                #print "area",area

                if area>1700:
        
                        #aproximacion de contorno
                        peri=cv2.arcLength(c,True) #Perimetro
                        approx=cv2.approxPolyDP(c,0.02*peri,True)
                        #Si la aproximacion tiene 4 vertices correspondera a un rectangulo (Libro)
                        if len(approx)==4:
                                cv2.drawContours(image,[approx],-1,(0,255,0),3,cv2.LINE_AA)
                                total+=1

        #5.Poner texto en imagen
        letrero= 'Objetos: '+ str(total)
        cv2.putText(image,letrero,(10,150),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),2)

        
        #Mostramos imagen
        cv2.imshow("video", image)
        #capturamos teclado
        tecla=cv2.waitKey(25) & 0xFF
        #Salimos si la tecla presionada es ESC
        if tecla== 27:
            break


#Liberamos Objeto
captura.release()

#Destruimos Ventanas
cv2.destroyAllWindows()


************************************************************************************


La detección de objetos usando Visión por Computador es una herramienta muy útil para crear aplicaciones novedosas y controlar procesos.
Si te es útil el código que comparto, no olvides suscribirte a mi canal de YouTube para más contenido.... Saludos
Alex7 Tutoriales

Tutoriales que en algún momento te pueden ser útiles.... Suscribete!

5 Comentarios

  1. _,cnts,_=cv2.findContours(closed.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

    ValueError: not enough values to unpack (expected 3, got 2), que significa este error

    ResponderEliminar
    Respuestas
    1. Has verificado que estes usando la versión 2.7 de Python?

      Eliminar
    2. 3.8, pasa algo o como debería corregir

      Eliminar
    3. lo que pasa es que al usar versiones actuales la funcion cv2.findContours() devuelve el valor obtenido solo a dos variables por lo que basta solo definir la variable con( cnts, _)

      Eliminar
  2. muy buen código amigo me ha sido de ayuda, gracias

    ResponderEliminar
Publicar un comentario
Artículo Anterior Artículo Siguiente