2014-09-06 13 views
5

Ho provato a utilizzare BackgroundSubtractorMOG per rimuovere lo sfondo ma ci sono alcuni oggetti che hanno già lasciato il frame ma il risultato di BackgroundSubtractorMOG.apply() mostra ancora che l'oggetto è ancora sul scena.BackgroundSubtractorMOG mantiene ancora l'oggetto dopo aver lasciato il frame

Ecco il mio codice

inputVideo = cv2.VideoCapture('input.avi') 
fgbg = cv2.BackgroundSubtractorMOG() 

while inputVideo.isOpened(): 
    retVal, frame = inputVideo.read() 

    fgmask = fgbg.apply(frame) 

    cv2.imshow('Foreground', fgmask) 
    cv2.imshow('Original', frame) 
    if cv2.waitKey(1) & 0xFF == 27: 
     break 

Ho anche provato BackgroundSubtractorMOG con parametri personalizzati (storia = 200, nmixtures = 5, ratio = 0,8), ma risultato è lo stesso. Ho fatto qualcosa di sbagliato o qualche raccomandazione? Per favore aiuto.

+0

Sto avendo lo stesso problema. Il parametro della cronologia è apparentemente ignorato. L'utilizzo di due valori diversi produce esattamente la stessa immagine. Penso che il parametro history sia predefinito a 0, il che significa che l'immagine di sfondo iniziale è l'unica immagine utilizzata e l'algoritmo non impara mai. – RussellStewart

risposta

8

Il problema è in fgbg.apply. Per qualche motivo, lo learningRate è impostato su 0. Effettuare chiamate in questo modo:

history = 10 # or whatever you want it to be 

fgmask = fgbg.apply(frame, learningRate=1.0/history) 

credito dovrebbe andare a Sebastian Ramirez che ha iniziato un biglietto in OpenCV e ha trovato la soluzione

+0

Grazie mille per il commento, mi aiuta. – Arsen

Problemi correlati