OpenCV (Open Source Computer Vision Library) est une collection de bibliothèques de traitement vidéo / image sous licence BSD. Il existe de nombreux algorithmes tels que le filtrage d'images, la mise en correspondance de modèles, la reconnaissance d'objets, l'analyse vidéo et l'apprentissage automatique.
Exemple de suivi de mouvement avec OpenCV (OpenCV Google Summer of Code 2015) https://www.youtube.com/watch?v=OUbUFn71S4s
Cliquez ici pour l'installation et une utilisation facile Installer OpenCV 3 (core + contrib) dans l'environnement Python 3 & Différence entre OpenCV 2 et OpenCV 3 & Easy operation check
Cliquez ici pour filtrer les images fixes Essayez la détection des bords avec OpenCV
Cliquez ici pour traiter les fichiers vidéo Essayez de convertir des vidéos en temps réel avec OpenCV Essayez de convertir des vidéos de caméra Web / caméra vidéo en temps réel avec OpenCV
Cette fois, j'essaierai de séparer l'arrière-plan et l'objet en mouvement à l'aide d'une vidéo prise avec une caméra à point fixe. Il peut être utilisé comme méthode d'extraction de personnes lors du suivi des personnes qui passent avec une caméra de surveillance.
Si vous empilez les cadres tout en les pondérant, les parties qui ne bougent pas émergeront. Au lieu de simplement ajouter, le cadre actuel est ajouté et soustrait du cadre d'arrière-plan. OpenCV utilise cv2.absdiff (). Aussi, afin de réduire l'erreur de calcul de pondération, elle est calculée en virgule flottante (np.float32).
Cadre du corps en mouvement = | Cadre actuel - Arrière-plan |
diff&accum.py
import cv2
import numpy as np
#Définition constante
ESC_KEY = 27 #Touche Echap
INTERVAL= 33 #intervalle
FRAME_RATE = 30 # fps
WINDOW_ORG = "org"
WINDOW_BACK = "back"
WINDOW_DIFF = "diff"
FILE_ORG = "org_768x576.avi"
#Préparation de la fenêtre
cv2.namedWindow(WINDOW_ORG)
cv2.namedWindow(WINDOW_BACK)
cv2.namedWindow(WINDOW_DIFF)
#Lire le fichier vidéo original
mov_org = cv2.VideoCapture(FILE_ORG)
#Première image lue
has_next, i_frame = mov_org.read()
#Cadre de fond
back_frame = np.zeros_like(i_frame, np.float32)
#Boucle de traitement de conversion
while has_next == True:
#Convertir l'image d'entrée en type à virgule flottante
f_frame = i_frame.astype(np.float32)
#Calcul de la différence
diff_frame = cv2.absdiff(f_frame, back_frame)
#Mise à jour en arrière-plan
cv2.accumulateWeighted(f_frame, back_frame, 0.025)
#Affichage du cadre
cv2.imshow(WINDOW_ORG, i_frame)
cv2.imshow(WINDOW_BACK, back_frame.astype(np.uint8))
cv2.imshow(WINDOW_DIFF, diff_frame.astype(np.uint8))
#Quitter avec la touche Echap
key = cv2.waitKey(INTERVAL)
if key == ESC_KEY:
break
#Lire l'image suivante
has_next, i_frame = mov_org.read()
#Terminer le traitement
cv2.destroyAllWindows()
mov_org.release()
** L'image d'origine **
** Image d'extraction d'objets en mouvement **
image de fond
J'ai réussi à extraire les gens qui marchent.
Recommended Posts