OpenCV (Open Source Computer Vision Library) ist eine Sammlung von BSD-lizenzierten Video- / Bildverarbeitungsbibliotheken. Es gibt viele Algorithmen wie Bildfilterung, Vorlagenabgleich, Objekterkennung, Videoanalyse und maschinelles Lernen.
Beispiel für Bewegungsverfolgung mit OpenCV (OpenCV Google Summer of Code 2015) https://www.youtube.com/watch?v=OUbUFn71S4s
Klicken Sie hier für die Installation und einfache Verwendung Installieren Sie OpenCV 3 (Core + Contrib) in der Python 3-Umgebung und unterscheiden Sie zwischen OpenCV 2 und OpenCV 3 und überprüfen Sie die einfache Bedienung
Klicken Sie hier, um Standbilder zu filtern Versuchen Sie die Kantenerkennung mit OpenCV
Klicken Sie hier, um Videodateien zu verarbeiten Versuchen Sie, Videos in Echtzeit mit OpenCV zu konvertieren Versuchen Sie, Webkamera- / Videokamera-Videos in Echtzeit mit OpenCV zu konvertieren
Dieses Mal werde ich versuchen, den Hintergrund und das sich bewegende Objekt mithilfe einer Videoaufnahme mit einer Festkommakamera zu trennen. Es kann als Methode zum Extrahieren von Personen verwendet werden, wenn Personen mit einer Überwachungskamera verfolgt werden.
Wenn Sie die Rahmen stapeln, während Sie sie beschweren, entstehen die Teile, die sich nicht bewegen. Anstatt einfach hinzuzufügen, wird das aktuelle Bild hinzugefügt und vom Hintergrundbild subtrahiert. OpenCV verwendet cv2.absdiff (). Um den Fehler bei der Gewichtungsberechnung zu verringern, wird er unter Verwendung des Gleitkommas (np.float32) berechnet.
Beweglicher Körperrahmen = | Aktueller Rahmen - Hintergrund |
diff&accum.py
import cv2
import numpy as np
#Konstante Definition
ESC_KEY = 27 #Esc-Taste
INTERVAL= 33 #Intervall
FRAME_RATE = 30 # fps
WINDOW_ORG = "org"
WINDOW_BACK = "back"
WINDOW_DIFF = "diff"
FILE_ORG = "org_768x576.avi"
#Fenstervorbereitung
cv2.namedWindow(WINDOW_ORG)
cv2.namedWindow(WINDOW_BACK)
cv2.namedWindow(WINDOW_DIFF)
#Lesen Sie die Originalvideodatei
mov_org = cv2.VideoCapture(FILE_ORG)
#Erster Frame gelesen
has_next, i_frame = mov_org.read()
#Hintergrundrahmen
back_frame = np.zeros_like(i_frame, np.float32)
#Konvertierungsverarbeitungsschleife
while has_next == True:
#Konvertieren Sie das Eingabebild in einen Gleitkommatyp
f_frame = i_frame.astype(np.float32)
#Differenzberechnung
diff_frame = cv2.absdiff(f_frame, back_frame)
#Hintergrundaktualisierung
cv2.accumulateWeighted(f_frame, back_frame, 0.025)
#Rahmenanzeige
cv2.imshow(WINDOW_ORG, i_frame)
cv2.imshow(WINDOW_BACK, back_frame.astype(np.uint8))
cv2.imshow(WINDOW_DIFF, diff_frame.astype(np.uint8))
#Beenden Sie mit der Esc-Taste
key = cv2.waitKey(INTERVAL)
if key == ESC_KEY:
break
#Lesen Sie den nächsten Frame
has_next, i_frame = mov_org.read()
#Verarbeitung beenden
cv2.destroyAllWindows()
mov_org.release()
** Das Originalbild **
** Objekt zum Extrahieren von bewegten Objekten **
Hintergrundbild
Ich konnte die wandelnden Menschen erfolgreich extrahieren.