A subtração do fundo é uma forma de eliminar o fundo da imagem. Para conseguir isso, extraímos o primeiro plano em movimento do fundo estático.

Background Subtraction tem vários casos de uso no dia a dia, está sendo usado para segmentação de objetos, reforço de segurança, rastreamento de pedestres, contagem do número de visitantes, número de veículos no trânsito etc. É capaz de aprender e identificar a máscara de primeiro plano.

No OpenCV, temos 3 algoritmos para fazer esta operação -

BackgroundSubtractorMOG - É um algoritmo de segmentação de fundo / primeiro plano baseado em mistura gaussiana.

BackgroundSubtractorMOG2 - também é um algoritmo de segmentação de fundo / primeiro plano baseado em mistura gaussiana. Fornece melhor adaptabilidade a cenas variadas devido a mudanças de iluminação, etc.



BackgroundSubtractorGMG - Este algoritmo combina estimativa estatística de imagem de fundo e segmentação bayesiana por pixel.

Como aplicar as funções embutidas do OpenCV para subtração de fundo -
Etapa # 1 - Criar um objeto para representar o algoritmo que estamos usando para subtração de fundo.
Etapa 2 - Aplicar backgroundsubtractor.apply()função na imagem.

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