2016-05-10 9 views
1

Ich versuche Rechtecke um Blobs in jedem Frame eines Videos zu zeichnen. Methode insertShape funktioniert aber nicht sehr gut. Verfahren Rechteck scheint nicht, etwas zu tun, und ich verstehe nicht, wo das Problem ist, wie es mit einer .avi-Datei funktioniert aber nicht mit .mp4 ...Matlab wird kein Rechteck überlagern

firstRunFlag = true; 

threshold = 0.18; 
se_erode = strel('square', 3); 
se_dilate = strel('square', 30); 

v = VideoReader('Traffic.mp4');  
figure;  
while hasFrame(v)   
    frame_now = readFrame(v);   
    if (firstRunFlag) 
     frame_prev = frame_now; 
     firstRunFlag = false; 
    end 

    frame_diff = frame_now - frame_prev; 
    frame_diff_grayscale = rgb2gray(frame_diff); 

    bw = im2bw(frame_diff_grayscale, threshold); 
    bw = imerode(bw, se_erode); 
    bw = imdilate(bw, se_dilate); 
    bw = imfill(bw,'holes'); 

    boxes = regionprops(bw, 'BoundingBox'); 
    imshow(frame_now); 

    for i=1:length(boxes) 
     this_box = boxes(i).BoundingBox; 
     rectangle('Position', [this_box(1), this_box(2), this_box(3), this_box(4)], 'EdgeColor', 'r', 'LineWidth', 2) 
    end  
    frame_prev = frame_now; 
end 

Es scheint auch zu funktionieren ein einzelnes Bild, aber nicht bei der Anzeige von Bild für Bild ...

+0

was ist 'Halten 'für das Rechteck? – Shai

+0

nein, es wird immer noch nicht das Rechteck anzeigen, und zeigt nur das erste Bild – krsnik93

+0

hinzufügen "Drawnnow" nach dem Zeichnen des Rechtecks. – Shai

Antwort

3

Manchmal Matlab aktualisiert ein Diagramm nicht, wenn mehrere Operationen angewendet werden (wie imshow inging aufeinanderfolgende Frames und rectanlges). Daher ist es nützlich, Matlab zu zwingen, das Diagramm unter Verwendung des Befehls drawnow zu aktualisieren.