informatica:programacion:python:modulos:opencv
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:python:modulos:opencv [2020/12/10 16:00] – tempwin | informatica:programacion:python:modulos:opencv [2020/12/10 16:30] (actual) – [Optical Flow] tempwin | ||
|---|---|---|---|
| Línea 928: | Línea 928: | ||
| cv2.destroyAllWindows() | cv2.destroyAllWindows() | ||
| + | </ | ||
| + | |||
| + | ===== 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, | ||
| + | |||
| + | # Puntos a seguir | ||
| + | prevPts = cv2.goodFeaturesToTrack(prev_gray, | ||
| + | |||
| + | mask = np.zeros_like(prev_frame) | ||
| + | |||
| + | while True: | ||
| + | |||
| + | ret, frame = cap.read() | ||
| + | | ||
| + | frame_gray = cv2.cvtColor(frame, | ||
| + | | ||
| + | # Calculamos el optical flow entre frames | ||
| + | nextPts, status, err = cv2.calcOpticalFlowPyrLK(prev_gray, | ||
| + | | ||
| + | good_new = nextPts[status == 1] | ||
| + | good_prev = prevPts[status == 1] | ||
| + | | ||
| + | for i, (new, prev) in enumerate(zip(good_new, | ||
| + | | ||
| + | x_new, y_new = new.ravel() | ||
| + | x_prev, y_prev = prev.ravel() | ||
| + | | ||
| + | mask = cv2.line(mask, | ||
| + | | ||
| + | frame = cv2.circle(frame, | ||
| + | | ||
| + | | ||
| + | img = csv2.add(frame, | ||
| + | cv2.imshow(' | ||
| + | | ||
| + | k = cv2.waitKey(30) & 0xFF | ||
| + | | ||
| + | if k == ord(' | ||
| + | break; | ||
| + | | ||
| + | prev_grey = frame_gray.copy() | ||
| + | prevPts = good_new.reshape(-1, | ||
| + | |||
| + | cv2.destroyAllWindows() | ||
| + | cap.release() | ||
| </ | </ | ||
informatica/programacion/python/modulos/opencv.1607612422.txt.gz · Última modificación: por tempwin
