Matlab不会叠加矩形
Matlab won't superimpose rectangle
我正在尝试在视频的每一帧中围绕斑点绘制矩形。方法 insertShape 有效但不是很好。方法矩形似乎没有做任何事情,我不明白问题出在哪里,因为它适用于 .avi 文件但不适用于 .mp4 ...
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
它似乎也适用于单个图像,但在逐帧显示时却不行...
有时 matlab 不更新绘图,当有多个操作应用于它时(如 imshow
ing 连续帧和 rectanlges)。因此,使用 drawnow
命令强制 matlab 更新绘图是很有用的。
我正在尝试在视频的每一帧中围绕斑点绘制矩形。方法 insertShape 有效但不是很好。方法矩形似乎没有做任何事情,我不明白问题出在哪里,因为它适用于 .avi 文件但不适用于 .mp4 ...
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
它似乎也适用于单个图像,但在逐帧显示时却不行...
有时 matlab 不更新绘图,当有多个操作应用于它时(如 imshow
ing 连续帧和 rectanlges)。因此,使用 drawnow
命令强制 matlab 更新绘图是很有用的。