先将视频读入后将每帧进行图像二值化处理,然后在子文件夹下生成二值化之后的图片,代码如下
v = VideoReader('f25.mp4');
ii = 1;
while hasFrame(v)
img = readFrame(v);
thresh = graythresh(img); %自动确定二值化阈值
I2=im2bw(img,thresh); %图像二值化
% filename = ['./jpg/'sprintf('%03d',ii) '.jpg'];
a1='./jpg/';
a2=num2str(ii);
a3='.jpg';
filename=[a1,a2,a3]; %生成文件名
imwrite(I2,filename) % Write out to a JPEG file (img1.jpg, img2.jpg, etc.)
ii = ii+1;
disp(ii)
end
然后将每张图片用imread显示出来,随后将图片保存在子文件夹,然后关闭窗口,一直至for循环结束,循环次数就是图片的张数即视频总帧数,代码如下
clear
for i=1:3141
%1314即为视频总帧数
k1=num2str(i);
k2='.jpg';
k=[k1,k2];
a=imread(k);
b=imresize(a,1/10);
scrsz = get(0,'ScreenSize');
figure1=figure('Position',[0 30 scrsz(3) scrsz(4)-95]);
spy(b)
k3='./plotimg/';
filename=[k3,k];
saveas(gcf,filename)
close
disp(i)
end
接下来将生成的图片一张一张写入到新建视频文件,代码如下
outputVideo = VideoWriter('shuttle_out.mp4');
outputVideo.FrameRate = 25;%这里是视频每秒钟的帧数
open(outputVideo)
for ii = 1:3141
img = imread([num2str(ii),'.jpg']);
writeVideo(outputVideo,img)
ii
end
close(outputVideo)
%close一定要记得写上,不然生成的视频文件有几率出现错误
在文件夹中就可以找到视频文件。