2017-02-28 6 views
1

Ich versuche, ein Rechteck über den Rahmen meines Videos zu zeichnen. Ich möchte, dass das Rechteck in allen Frames des Videos erscheint. Aufgrund des "Anhaltens", das ich angewendet habe, konnte ich meine Begrenzungsbox nur auf einigen der Rahmen sehen.Rechteck auf die Rahmen eines Videos zeichnen

v = VideoReader('test.mp4'); 
numFrames = get(v,'NumberOfFrames'); 
for k=1:numFrames 
    image = read(v,k); 
    rectangle('Position',[0 0 100 100],'EdgeColor','r','LineWidth', 3); 
    hold on; 
    imshow(image); 
end 

Wenn ich versuche, die Haltefunktion zu entfernen, wird das Rechteck nicht auf dem Rahmen gezeichnet. Jede Hilfe wäre willkommen.

+0

Sie müssen Ihren Griff auf der Handlung entfernen, wenn Sie zum nächsten Rahmen gehen. Fügen Sie '' Hold'' nach 'imshow' ein. –

+0

Ich habe versucht, aber es funktioniert nicht. Ich sehe nur ein Bild mit der Bounding-Box drauf. Aber ich kann die anderen Frames nicht sehen –

Antwort

1

Tauschen Sie die imshow und rectangle Anrufe, so dass imshow eine Figur erstellt, die das Bild zuerst passt. Verwenden Sie rectangle nach imshow, um schließlich das Rechteck zu zeichnen. Schließlich verwenden Sie drawnow nach imshow, damit Sie den Grafikpuffer leeren und die Grafik aktualisieren. Sie benötigen auch hold on; und hold off; zwischen dem rectangle Aufruf.

v = VideoReader('test.mp4'); 
numFrames = get(v,'NumberOfFrames'); 
for k=1:numFrames 
    image = read(v,k); 
    imshow(image); 
    hold on; 
    rectangle('Position',[0 0 100 100],'EdgeColor','r','LineWidth', 3); 
    hold off; 
    drawnow; 
end 
+0

Um expliziter zu sein, ist es eine gute Übung statt "hold off" benutzen Sie 'clf' zu Beginn des Plottings! –

+0

Danke. Es funktionierte und die Bounding Box wird auf jedem Frame des Videos gedruckt. –

Verwandte Themen