fileName = 'xylophone.mpg'
obj = VideoReader(fileName)% 调用VideoReader函数读取视频文件
numFrames = obj.NumberOfFrames % 帧数
for i=2:numFrames
frame=read(obj,i) % 取当前帧
Pframe=read(obj,i-1)% 取前一帧
if ndims(frame)==3% 若为RGB,转为灰度图
x=rgb2gray(frame)
else
x=frame
end
if ndims(Pframe)==3 % 同上
y=rgb2gray(Pframe)
else
y=Pframe
end
subplot(1,2,1)
imshow(Pframe,[]) % 显示前一帧图像
title(sprintf('第%d帧',i-1)) % 显示前一帧图像的帧数
% 帧间差分算袭罩法
x=medfilt2(x) % 对当前帧进行中值滤波
y=medfilt2(y) % 对前一帧进行中值滤波
n=im2double(x)
p=im2double(y)
c=n-p % 取相邻帧间差
c=medfilt2(c) % 对帧间差图像进行中值滤波
t=10/256% 设置阈值
c(abs(c)>=t)=255% 超过阈值置1,低于阈值置0
c(abs(c)<t)=0
c=logical(c)
x1=Pframe(:,:,1) % 将运拍弯闹动部分标记为绿色[0,255,0]
x1(c)=0
x2=Pframe(:,:,2)
x2(c)=255
x3=Pframe(:,:,3)
x3(c)=0
xc=cat(3,x1,x2,x3)% 生成新的图像
subplot(1,2,2)
imshow(xc,[]) % 显示新的图像,突出闹激运动目标区域
title(sprintf('第%d帧',i-1))
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)