Die Hintergrundsubtraktion ist eine Möglichkeit, den Hintergrund aus dem Bild zu entfernen. Um dies zu erreichen, extrahieren wir den sich bewegenden Vordergrund aus dem statischen Hintergrund.

Die Hintergrundsubtraktion hat im täglichen Leben mehrere Anwendungsfälle. Sie wird zur Objektsegmentierung, Sicherheitsverbesserung, Fußgängerverfolgung, Zählen der Anzahl der Besucher, Anzahl der Fahrzeuge im Verkehr usw. verwendet. Sie kann die Vordergrundmaske lernen und identifizieren.

In OpenCV haben wir 3 Algorithmen, um diese Operation durchzuführen -

BackgroundSubtractorMOG - Es handelt sich um einen auf Gaußschen Gemischen basierenden Hintergrund- / Vordergrundsegmentierungsalgorithmus.

BackgroundSubtractorMOG2 - Es handelt sich auch um einen auf Gaußschen Gemischen basierenden Hintergrund- / Vordergrundsegmentierungsalgorithmus. Es bietet eine bessere Anpassungsfähigkeit an unterschiedliche Szenen aufgrund von Beleuchtungsänderungen usw.



BackgroundSubtractorGMG - Dieser Algorithmus kombiniert statistische Hintergrundbildschätzung und Bayes'sche Segmentierung pro Pixel.

So wenden Sie integrierte OpenCV-Funktionen für die Hintergrundsubtraktion an -
Schritt 1 - Erstellen Sie ein Objekt, um den Algorithmus zu kennzeichnen, den wir für die Hintergrundsubtraktion verwenden.
Schritt 2 - backgroundsubtractor.apply() Funktion auf das Bild anwenden .

import numpy as np 
import cv2 
  
fgbg1 = cv2.bgsegm.createBackgroundSubtractorMOG();    
fgbg2 = cv2.createBackgroundSubtractorMOG2(); 
fgbg3 = cv2.bgsegm.createBackgroundSubtractorGMG(); 
  
cap = cv2.VideoCapture(0); 
while(1): 
    
    ret, img = cap.read(); 
      
    
    fgmask1 = fgbg1.apply(img); 
    fgmask2 = fgbg2.apply(img); 
    fgmask3 = fgbg3.apply(img); 
      
    cv2.imshow('Original', img); 
    cv2.imshow('MOG', fgmask1); 
    cv2.imshow('MOG2', fgmask2); 
    cv2.imshow('GMG', fgmask3); 
    k = cv2.waitKey(30) & 0xff; 
    if k == 27: 
        break; 
  
cap.release(); 
cv2.destroyAllWindows();