2016-05-10 90 views
1

我試圖在視頻的每一幀中圍繞斑點繪製矩形。方法insertShape的作品,但不是很好。方法矩形似乎並沒有做任何事情,我不明白哪來的問題,因爲它的工作原理與一個.avi文件,但不會與.MP4 ...Matlab不會重疊矩形

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 

這也似乎是工作在一個圖像,但不是當顯示幀後幀...

+0

那麼矩形上的「hold on」呢? – Shai

+0

nope,它仍然不會顯示矩形,只顯示第一幀 – krsnik93

+0

在繪製矩形後添加'drawnow'。 – Shai

回答

3

有時matlab不會更新一個情節,當有幾個操作應用於它(如imshow ing連續幀和rectanlges)。因此,強制matlab使用drawnow命令來更新圖是很有用的。