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:59] – [Definir tamaño lienzo Matplotlib] tempwininformatica:programacion:python:modulos:opencv [2020/12/10 16:30] (actual) – [Optical Flow] tempwin
Línea 799: 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 928: 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.1607612354.txt.gz · Última modificación: por tempwin