Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:modulos:opencv

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:python:modulos:opencv [2020/12/10 15:53] – [Detección de ojos] tempwininformatica:programacion:python:modulos:opencv [2020/12/10 16:30] (actual) – [Optical Flow] tempwin
Línea 133: Línea 133:
 </code> </code>
  
 +Podemos convertirlo en una función para utilizarlo más cómodamente:
 +
 +<code python>
 +def display(img):
 +    dig = plt.figure(figsize=(10,8))
 +    ax = fig.add_subplot(111)
 +    new_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 +    ax.imgshow(new_img)
 +    
 +# Para usarla:
 +img = cv2.imread("imagen.jpg")
 +display(img)
 +</code>
 ===== Imágenes en OpenCV ===== ===== Imágenes en OpenCV =====
  
Línea 786: Línea 799:
 Cuando la imagen pasa todos los clasificadores, se puede concluir que se ha detectado una cara. Cuando la imagen pasa todos los clasificadores, se puede concluir que se ha detectado una cara.
  
-El problema de este método es que necesita un conjunto muy grande de información. La parte buena es que OpenCV viene con ficheros XML pre-entrenados para Haar.+El problema de este método es que necesita un conjunto muy grande de información. La parte buena es que OpenCV [[https://github.com/opencv/opencv/tree/master/data/haarcascades|viene con ficheros XML pre-entrenados para Haar]].
  
 <code python> <code python>
Línea 915: Línea 928:
  
 cv2.destroyAllWindows() cv2.destroyAllWindows()
 +</code>
 +
 +===== Seguimiento de objetos =====
 +
 +Técnicas:
 +
 +  * Optical Flow
 +  * MeanShift y CamShift
 +
 +==== Optical Flow ====
 +
 +Los métodos de OpenCV parten de un conjunto de puntos y un frame y luego intenta encontrar esos puntos en el siguiente frame.
 +
 +Dos algoritmos:
 +
 +  * Lucas-Kanade
 +  * Gunner Farneback: si queremos seguir todos los puntos de un vídeo.
 +
 +<code python>
 +cap = cv2.VideoCapture(0)
 +
 +ret, prev_frame = cap.read()
 +
 +# Primer frame
 +prev_gray = cv2.cvtColor(prev_frame, cv2.COLOR_BGR2RGB)
 +
 +# Puntos a seguir
 +prevPts = cv2.goodFeaturesToTrack(prev_gray, mask = None, **corner_track_params)
 +
 +mask = np.zeros_like(prev_frame)
 +
 +while True:
 +
 +    ret, frame = cap.read()
 +    
 +    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
 +    
 +    # Calculamos el optical flow entre frames
 +    nextPts, status, err = cv2.calcOpticalFlowPyrLK(prev_gray, frame_gray, prevPts, None, **lk_params)
 +    
 +    good_new = nextPts[status == 1]
 +    good_prev = prevPts[status == 1]
 +    
 +    for i, (new, prev) in enumerate(zip(good_new, good_prev)):
 +        
 +        x_new, y_new = new.ravel()
 +        x_prev, y_prev = prev.ravel()
 +        
 +        mask = cv2.line(mask, (x_new, y_new), (x_prev, y_prev), (0,255,0),3)
 +        
 +        frame = cv2.circle(frame, (x_new, y_new), 8, (0,0,255), -1)
 +        
 +        
 +    img = csv2.add(frame, mask)
 +    cv2.imshow('tracking', img)
 +    
 +    k = cv2.waitKey(30) & 0xFF
 +    
 +    if k == ord('q'):
 +        break;
 +        
 +    prev_grey = frame_gray.copy()
 +    prevPts = good_new.reshape(-1, 1, 2)
 +
 +cv2.destroyAllWindows()
 +cap.release()
 </code> </code>
informatica/programacion/python/modulos/opencv.1607612034.txt.gz · Última modificación: por tempwin