利用matlab从视频流中提取图片
本程序可将 avi、mp4、flv 等格式的视频按帧分离成图片,且能够进行系统计时,用以分析算法效率。
开始计时
tic
数据载入
[filename, filepath] = uigetfile(...
{'*.avi;*.mp4;*.flv','video files(*.avi;*.mp4;*.flv)';...
'*.avi;', 'avi files(*.avi)';...
'*.mp4;', 'mp4 files(*.mps)';...
'*.flv;', 'flv files(*.flv)';...
'*.*', 'all files(*.*)'},...
'选择视频文件');
添加进度条
h = waitbar(0, 'Starting...');
创建文件夹,用于保存图片
mkdir([filepath, 'ImageFrame']); %文件夹名称ImageFrame
ImageFramePath = strcat(filepath, 'ImageFrame\'); %文件夹路径
读取视频
video_file = [filepath filename];
video = VideoReader(video_file);
numFrames = get(video, 'NumberOfFrames');
分离图片
for i = 1 : 1 : numFrames
image_name = strcat(ImageFramePath, num2str(i)); %写在ImageFrame文件夹中
image_name = strcat(image_name, '.jpg');
I = read(video, i); %读出图片
imwrite(I , image_name, 'jpg'); %写图片
I = [];
% 更新进度条
if isequal(i, numFrames)
strWaitBar = [num2str((i/numFrames)*100), '%', 'Done!'];
else
strWaitBar = [num2str((i/numFrames)*100), '%', 'Waiting...'];
end
waitbar((i/numFrames), h, strWaitBar)
end
delete(h);
计时结束
toc