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'image, la 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 http://qiita.com/olympic2020/items/d5d475a446ec9c73261e
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
Cette fois, je vais essayer de traiter les vidéos qui ont une entrée en temps réel, comme les caméras Web et les caméras vidéo.
Le lissage est un filtre utilisé pour déterminer la zone des caractères et la zone des objets en mouvement à suivre. A titre d'exemple, le lissage est effectué dans le flux suivant pour déterminer la zone.
OpenCV prend en charge les lissages suivants:
Cette fois, créons un programme qui effectue un lissage gaussien sur l'entrée vidéo en temps réel, affiche les fenêtres et enregistre les fichiers.
sebcam.py
import cv2
# cv2.cv.CV_FOURCC
def cv_fourcc(c1, c2, c3, c4):
return (ord(c1) & 255) + ((ord(c2) & 255) << 8) + \
((ord(c3) & 255) << 16) + ((ord(c4) & 255) << 24)
if __name__ == '__main__':
#Définition constante
ESC_KEY = 27 #Touche Echap
INTERVAL= 33 #Temps d'attente
FRAME_RATE = 30 # fps
ORG_WINDOW_NAME = "org"
GAUSSIAN_WINDOW_NAME = "gaussian"
GAUSSIAN_FILE_NAME = "gaussian.avi"
DEVICE_ID = 0
#Acquisition d'image de la caméra
cap = cv2.VideoCapture(DEVICE_ID)
#Préparation du fichier vidéo enregistré
end_flag, c_frame = cap.read()
height, width, channels = c_frame.shape
rec = cv2.VideoWriter(GAUSSIAN_FILE_NAME, \
cv_fourcc('X', 'V', 'I', 'D'), \
FRAME_RATE, \
(width, height), \
True)
#Préparation de la fenêtre
cv2.namedWindow(ORG_WINDOW_NAME)
cv2.namedWindow(GAUSSIAN_WINDOW_NAME)
#Boucle de traitement de conversion
while end_flag == True:
#Lissage gaussien
g_frame = cv2.GaussianBlur(c_frame, (15, 15), 10)
#Affichage du cadre
cv2.imshow(ORG_WINDOW_NAME, c_frame)
cv2.imshow(GAUSSIAN_WINDOW_NAME, g_frame)
#Écriture de cadre
rec.write(g_frame)
#Quitter avec la touche Echap
key = cv2.waitKey(INTERVAL)
if key == ESC_KEY:
break
#Lire l'image suivante
end_flag, c_frame = cap.read()
#Terminer le traitement
cv2.destroyAllWindows()
cap.release()
rec.release()
Le fonctionnement du script a été confirmé dans l'environnement suivant.
Les fichiers vidéo et les entrées de la caméra peuvent être traités de la même manière dans le programme. Lors de la gestion des entrées de la caméra, il est OK si vous spécifiez l'ID de périphérique à la place du nom de fichier.
cv2.VideoCapture(DEVICE_ID)
Si vous n'avez qu'une seule caméra, spécifiez DEVICE_ID = 0
.
Environnement d'exécution —— Ordinateur portable que j'ai acheté il y a 5 ans
Cible de tir --Quand tu fais rouler la citrouille sur le sol
Méthode de prise de vue J'ai pris une photo deux fois
** Pas de filtrage **
** Avec lissage gaussien **
Cliquez ici pour regarder la vidéo.
--Pas de filtrage Enregistrez simplement avec le logiciel connecté au PC (lien)
"C'est un vieux PC portable, et OpenCV peut-il résister aux performances en Python?" J'ai essayé de l'exécuter avec une demi-confiance, mais cela a fonctionné sans problème (^^) v
Recommended Posts