将视频截取成帧
fileName = 'q.avi'; %此处输入视频名称,要带后缀,注意好像只有wmv和avi格式
obj = VideoReader(fileName);
numFrames = obj.NumberOfFrames;% 帧的总数
for k = 1 :numFrames% 读取数据
frame = read(obj,k);
imshow(frame);
imwrite(frame,strcat(num2str(k),'.jpg'),'jpg');% 保存帧
End
灰度二值化图像
for i=1:numberofframe%numberofframe为图像张数
imageName=strcat(num2str(i),'.jpg');
I = imread(imageName);
imggray = rgb2gray(I);%灰度化图像
imwrite(imggray,strcat(num2str(i),'huidu.jpg'),'jpg');% 保存帧
i2=im2bw(I);% i2是二值图像,不需要求阈值
imwrite(i2,strcat(num2str(i),'erzhi.jpg'),'jpg');% 保存帧
end
背景差分法
filename = '103.jpg';%读原图
I = imread(filename);
X = rgb2gray(I);%读,灰度原图
filename = 'YCBJ.jpg';%读取背景图
M = imread(filename);
Y = rgb2gray(M);%读,灰度背景图
Z = imabsdiff(X,Y);%两图相减
level = graythresh(Z);
Z = im2bw(Z,level);%二值化图
% 膨胀腐蚀算子,相当于闭操作
se = strel('disk',2);
Q=imerode(Z,se);%腐蚀
Q=imdilate(Q,se);%膨胀
lab1='原图';
lab2='背景';
lab3='差分二值化后';
lab4='腐蚀膨胀后';
subplot(221);imshow(I);title(lab1);
subplot(222);imshow(M);title(lab2);
subplot(223);imshow(Z);title(lab3);
subplot(224);imshow(Q);title(lab4);
三帧差分法
filename1='110.jpg';%读取前一帧
I1 = imread(filename1);
O = rgb2gray(I1);%读,灰度前一帧
filename2='115.jpg';%读取中间帧图像
I2 = imread(filename2);
P = rgb2gray(I2);%读,灰度当前帧
filename3='120.jpg';%读取后一帧图像
I3 = imread(filename3);
Q = rgb2gray(I3);%读,灰度后一帧
A = imabsdiff(P,O);
level1 = graythresh(A);
A = im2bw(A,level1);%二值化前两帧差图
subplot(131);imshow(A);
B = imabsdiff(Q,P);
&