2017-03-23 4 views
0

Ich versuche, Hintergrundsubtraktion auf mein Video mit Vordergrunddetektor anwenden. Die Hintergrundsubtraktion funktioniert. Aber imshow zeigt es nur für den endgültigen Rahmen. Jede mögliche Hilfe würdeNur das letzte Bild wird für Imshow angezeigt

foregroundDetector = vision.ForegroundDetector('NumGaussians', 3, ...'NumTrainingFrames', 100); 

videoReader = vision.VideoFileReader('test1.mp4'); 

for i = 1:120 
    frame = step(videoReader); % read the next video frame 
%  imshow(frame); 
    disp(i); 
foreground = step(foregroundDetector, frame); 
    imshow(foreground); 
end 

Antwort

0

Um geschätzt werden, um unnötige Grafikverarbeitung zu vermeiden, wenn Sie kontinuierlich eine Grafik innerhalb einer Schleife Objekt aktualisieren, werden die Grafiken nicht wirklich gemacht, bis es eine Pause in der Ausführung einer expliziten drawnow ist Wird verwendet, um das Löschen der Ereigniswarteschlange zu erzwingen.

for k = 1:120 
    frame = step(videoReader); % read the next video frame 
    foreground = step(foregroundDetector, frame); 
    imshow(foreground); 

    % Explicitly force the renderer to update the display 
    drawnow 
end 

Als Randbemerkung, für eine bessere Leistung Sie Ihr vorhandenes Bildobjekt aktualisiert, anstatt ständig neue mit imshow zu schaffen.

frame = step(videoReader); 
foreground = step(foregroundDetector, frame); 
him = imshow(foreground); 

for k = 1:119 
    set(him, 'CData', foreground) 
    drawnow 

    frame = step(videoReader); % read the next video frame 
    foreground = step(foregroundDetector, frame); 
end 
Verwandte Themen