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 15:47] – [Detección de ojos] tempwin | informatica:programacion:python:modulos:opencv [2020/12/10 16:30] (actual) – [Optical Flow] tempwin | ||
|---|---|---|---|
| Línea 133: | Línea 133: | ||
| </ | </ | ||
| + | Podemos convertirlo en una función para utilizarlo más cómodamente: | ||
| + | |||
| + | <code python> | ||
| + | def display(img): | ||
| + | dig = plt.figure(figsize=(10, | ||
| + | ax = fig.add_subplot(111) | ||
| + | new_img = cv2.cvtColor(img, | ||
| + | ax.imgshow(new_img) | ||
| + | | ||
| + | # Para usarla: | ||
| + | img = cv2.imread(" | ||
| + | display(img) | ||
| + | </ | ||
| ===== Imágenes en OpenCV ===== | ===== Imágenes en OpenCV ===== | ||
| Línea 786: | Línea 799: | ||
| Cuando la imagen pasa todos los clasificadores, | Cuando la imagen pasa todos los clasificadores, | ||
| - | 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 |
| <code python> | <code python> | ||
| Línea 875: | Línea 888: | ||
| </ | </ | ||
| + | |||
| + | ==== Detección de caras en vídeo ==== | ||
| + | |||
| + | <code python> | ||
| + | import cv2 | ||
| + | import numpy as np | ||
| + | import matplotlib.pyplot as plt | ||
| + | %matplotlib inline | ||
| + | |||
| + | # Capturamos vídeo de la primera fuente del PC | ||
| + | cap = cv2.VideoCapture(0) | ||
| + | |||
| + | # Función de detección de imágenes | ||
| + | def detect_face(img): | ||
| + | | ||
| + | face_img = img.copy() | ||
| + | | ||
| + | face_rects = face_cascade.detectMultiScale(face_img) | ||
| + | | ||
| + | for (x,y,w,h) in face_rects: | ||
| + | cv2.rectangle(face_img, | ||
| + | | ||
| + | return face_img | ||
| + | |||
| + | while True: | ||
| + | |||
| + | ret, frame = cap.read(0) | ||
| + | | ||
| + | frame = detect_face(frame) | ||
| + | | ||
| + | cv2.imshow(' | ||
| + | | ||
| + | k = cv2.waitKey(1) | ||
| + | | ||
| + | if k == ord(' | ||
| + | break | ||
| + | | ||
| + | cap.release() | ||
| + | |||
| + | 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.1607611656.txt.gz · Última modificación: por tempwin
