本章会介绍如何利用matlab进行视频处理,也就是抽帧
总所周知,视频是由一张一张图片所构成的,那么如何用matlab将视频中的每一张图片提取出来呢?
一、视频的预处理
matlab可以对视频处理的前提是可以读取视频文件的信息,而有些视频格式隐藏了视频的信息,因此我们需要对视频格式进行转换,转换到能读取视频的基本信息即可。
转换工具可以使用迅捷视频转换器
二、读取视频
video_file='迅捷视频转换器转换后的新闻联播.mp4';
video=VideoReader(video_file);
frame_number = video.NumberOfFrames; %视频的总帧数
VideoReader函数可以将视频文件保存为一个数据结构,这个数据结构储存着视频文件的信息,如帧数等。后续我们需要调用储存的信息,下面是视频文件的属性介绍
三、分离图片
我们读取了视频文件以及视频文件的信息,要分离图片,就是提取视频的帧数,然后找到帧数对应的图片,将其保存
image函数可以串联字符串,此处先将保存的文件夹路径输入,然后输入前缀image_,继续输入编号与后缀,这就构建好了需要保存文件的名称,之后用到imwrite输入参数即可
for i=1:30:frame_number % 这里演示的是每30帧数保存一次(如果每一帧都全部保存的话所要花费的时间很长)
image_name=strcat('D:\我的文件\数学建模\清风资料\1. 视频配套所有课件和代码_后续还会不断更新\第13讲. 奇异值分解SVD和图形处理\代码和例题数据\将视频分离为图片\图片\image_',num2str(i),'.jpg');
% % 自己运行时路径一定要改成自己电脑上文件夹的路径,别直接用我的路径就运行了,可能会报错的。
Photo=read(video,i); %读出所在帧的图片对象
imwrite(Photo,image_name); %将图片保存到指定的位置
end
四、效果预览
运行上方的代码,我们选择每30帧保存一张图片,效果如图所示