[PYTHON] Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen

Einführung

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.

Algorithmus

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.

  1. Bereiten Sie einen mit Nullen gefüllten Hintergrundrahmen vor
  2. Neuer Hintergrund = Hintergrund x (1 Gewicht) + aktuelles Bild x Gewicht
  3. Wiederholen Sie Schritt 2

Beweglicher Körperrahmen = | Aktueller Rahmen - Hintergrund |

Programm

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()

Ausführungsergebnis

org.png ** Das Originalbild **

diff.png ** Objekt zum Extrahieren von bewegten Objekten **

back.png Hintergrundbild

Ich konnte die wandelnden Menschen erfolgreich extrahieren.

Recommended Posts

Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
So schleifen und spielen Sie ein GIF-Video mit openCV ab
Versuchen Sie, die Position eines Objekts auf dem Schreibtisch (reales Koordinatensystem) anhand des Kamerabilds mit Python + OpenCV zu messen
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Konvertieren Sie Videos mit ffmpeg + python + opencv in Schwarzweiß
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Versuchen Sie, das Bild mit opencv2 zu verwischen
Die Farbextraktion mit Python + OpenCV löste das Rätsel des grünen Hintergrunds
Versuchen Sie, das N Queen-Problem mit SA von PyQUBO zu lösen
Verbesserung der Wiederverwendbarkeit und Wartbarkeit von mit Luigi erstellten Workflows
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Versuchen Sie, den Servomotor mit RasPi zu bewegen (360-Grad-Rund- und Rundversion).
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Versuchen Sie, die Kamera mit Pythons OpenCV zu verwenden
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Lesen Sie das Diagrammbild mit OpenCV und ermitteln Sie die Koordinaten des Endpunkts des Diagramms
Versuchen Sie, nur den Kohlenstoff am Ende der Kette mit SMARTS zu reagieren
Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python
Erkennen Sie die Kontur und Richtung eines geformten Objekts mit OpenCV3 und Python3 (Hauptkomponentenanalyse: PCA, Eigenvektor)
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering
Versuche mit EV3 und PC zu kommunizieren! (MQTT)
So testen Sie den Friends-of-Friends-Algorithmus mit pyfof
Geben Sie die Start- und Endpositionen der Dateien an, die in qiitap enthalten sein sollen
Skript zum Twittern mit Vielfachen von 3 und Zahlen mit 3 !!
Der einfachste Weg, OpenCV mit Python zu verwenden
Ich habe den gleitenden Durchschnitt des IIR-Filtertyps mit Pandas und Scipy verglichen
Speichern Sie das Objekt in einer Datei mit pickle
Versuchen Sie auch bei der Konvertierung von CSV in Leerzeichenbegrenzer ernsthaft, Eingabe / Ausgabe und Regeln zu trennen
Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV
Versuchen Sie, ein Objekt mit RaspberryPi zu erkennen ~ Teil 1: Vergleich der Erkennungsgeschwindigkeit ~
[Überprüfung] Versuchen Sie, die Punktgruppe an der Optimierungsfunktion von Pytorch Part 1 auszurichten
Versuchen Sie, die Bewegung des Sonnensystems zu simulieren
Die Geschichte vom Umzug von Pipenv zur Poesie
Versuchen Sie, Fische mit Python + OpenCV2.4 (unvollendet) zu erkennen.
Eine Einführung in die GUI-Software der Klassenplattform, die mit Python / Tkinter erstellt wurde! (Und viele Try and Error)! (Während des Schreibens)
[Blender] So ermitteln Sie die Auswahlreihenfolge von Scheitelpunkten, Seiten und Flächen eines Objekts
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
Extrahieren Sie Bilder und Tabellen mit Python aus PDF, um die Berichtslast zu verringern
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Eine Geschichte über den Versuch, mit der kostenlosen Stufe von AWS zur COVID-19-Analyse beizutragen, und das Scheitern
Da es Weihnachten ist, werde ich versuchen, die Genealogie Jesu Christi mit Cabocha zu zeichnen
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Fügen Sie Attribute von Klassenobjekten mit einer for-Anweisung hinzu
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Fügen Sie mit Matplotlib Informationen am unteren Rand der Abbildung hinzu
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Versuchen Sie, die Bildkonvertierung mit OpenCV mit Python zu projizieren
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen
Versuchen Sie, den Servomotor mit RasPi (180-Grad-Version) zu bewegen.
Füllen Sie den Hintergrund mit einer einzigen Farbe mit OpenCV2 + Python
Visualisieren Sie mit OpenCV den Wertschätzungsstatus von Kunstwerken
Ein Server, der mit Flasche.py und OpenCV die Anzahl der Personen vor der Kamera zurückgibt