matlab视频图片动态目标检测

项目场景:matlab视频图片动态目标检测

问题描述:

<本次编写的视频动态目标检测采用的算法很简单,主要就是通过对比视频中两个不同时刻的图片帧之间的做差来判断出移动物体的大概位置,由于方法很简易,也带来很大的问题,比如此方法是对比两个不同帧的差值来判断位置,那么如果物体不动,我们视频相机移动则相对来说视频中的物体全部处于移动变化,显然就让我们的这个检测的方法暴露出致命缺陷,当然缺陷还有很多,下面直接上程序。

Objvideo = VideoReader('E:\DigitalImage\目标检测\video.mp4');%读取视频
vidHeight = Objvideo.Height;%获取视频参数
vidWidth = Objvideo.Width;
nFrames = Objvideo.NumberOfFrames;%获取视频帧数
vidFrames = read(Objvideo);%读取视频全部的帧


for k=1:nFrames-3%获取间隔的两帧进行对比
img1 = vidFrames(:,:,:,k);
img=img1;
img2 = vidFrames(:,:,:,k+3);

img1 = rgb2gray(img1);%灰度化,并计算两张图片的差别
img2 = rgb2gray(img2);
bwimg = abs(img1-img2)>8;%二值图像

SE = ones(3,3);%先腐蚀再膨胀,消除一些细微影响
bwimg = imerode(bwimg, SE);
bwimg = bwmorph(bwimg,'dilate',9);

[L, nm] = bwlabel(bwimg,8); %找出8连通域并标记
imshow(img);

for i=1:nm%绘制移动目标的方框
    [r,c] = find(L == i);
    left = min(c);
    right = max(c);
    top = min(r);
    buttom = max(r);
    width = right - left + 1;
    height = buttom -top + 1;
    if width>20 || height>20%去除微小物体的检测
    rectangle('Position', [left, top, width, height],'EdgeColor',[1,0,0]);
    end
end

fileName='E:\DigitalImage\目标检测\img\result_';%保存框出移动物体的图片,如果不是在matlab路径下,一定要给出具体的路径,否则出现无权限打开文件
frame=getframe(gcf);
strtem = strcat(fileName,int2str(k),'.','jpg');
imwrite(frame.cdata,strtem);

end

WriterObj = VideoWriter('E:\DigitalImage\目标检测\result_video','MPEG-4');%如果不是在matlab路径下,一定要给出具体的路径,否则出现无权限打开文件
open(WriterObj);%合成新的移动物体检测视频
for k=1:nFrames-3
    strtem = strcat(fileName,int2str(k),'.','jpg');
    frame = imread(strtem);
    writeVideo(WriterObj,frame);
end

close(WriterObj);




实验结果部分图片:在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值