大家帮忙看看这个三帧差分法的代码哪里出了问题?参照论坛上的相邻帧差法,改造成三帧差分法。
clc;
clear;
targetavi='SampleVideo.avi'; %%原始视频
resultavi='result.avi'; %%检测结果视频
%%%%%%%%%%%%%%%%%%%%%%读取视频
mov=aviread(targetavi);
%mov=mmreader(targetavi);
fnum=size(mov,2);
%%%%%%%%%%%%%%%%%%%%%%建立结果视频
aviobj = avifile(resultavi);
aviobj.Quality = 100;
aviobj.Fps = 15;
%aviobj.compression='Indeo5';
aviobj.compression='None';
%%%%%%%%%%%%%%%%%%%%%%帧间差分法
for i=2:fnum
x=mov(i-1).cdata(:,:,:);
y=mov(i).cdata(:,:,:);
z=mov(i+1).cdata(:,:,:);
m=rgb2gray(x);
m=medfilt2(m);
n=rgb2gray(y);
n=medfilt2(n);
o=rgb2gray(z);
o=medfilt2(o);
q=im2double(n);
w=im2double(m);
p=im2double(o);
c=q-w;%%前两帧差分
b=p-q;%%后两帧差分
t=40; %%阈值,此值可以调节
t=t/256;%%转化为double型数据
k=find(abs(c)>=t);%%find函数作用是找到图c中的值大于t的点坐标
d=find(abs(b)>=t);%%find函数作用是找到图b中的值大于t的点坐标
c(k)=255;%%二值化的一
b(d)=255;
k=find(abs(c)
d=find(abs(b)
c(k)=0;%%二值化的零
b(d)=0;
f=c&b;
imshow(f);
adata=cat(3,f,f,f);%%灰度图像生成视频必加此句
aviobj = addframe(aviobj,adata);%%生成视频
hold on;
drawnow;
hold off;
end
aviobj=close(aviobj);
显示的错误提示:
??? Error using ==> avifile.addframe>getInputType at 384
Invalid input argument. Each frame must be a numeric matrix, a MATLAB movie structure, or a handle to a figure
or axis.
Error in ==> avifile.addframe at 58
inputType = getInputType(varargin{i});
Error in ==> ThreeFrameDifference at 61
aviobj = addframe(aviobj,adata);%%生成视频