批量输出视屏帧数图片
对视频进行处理时候,需要显示每一帧的图片,这时就需要对视屏按照帧数进行分割,然后批量输出图片
clc
clear
%date:2018-10-22
%author:猪猪侠
%邮箱:[email protected]
warning off
video = VideoReader('tp.mp4');%读取视频注意填写位置
n=video.NumberOfFrames;%视频所有帧数
mkdir([cd,'/tp']);%创建一个文件夹fly
directory=[cd,'/tp/'];%保存图片到指定文件夹fly中
for i=1:n
Img_I=read(video,i);%按顺序一帧一帧读取视频
imshow(Img_I);%显示帧
%此处涉及到批量输出的图片命名的问题,下面是详细的拼接方法['名字',num2str(i),'格式']
imwrite(Img_I,[directory,'test_',num2str(i) '.bmp']);%保存图片名字以及格式到指定文件夹中,
end;
close all
输出结果:
突然感觉自己无聊了,视屏生成图片再逆向合成视屏。
function CreatVideoFromPic(dn, picformat,aviname)
% CreatVideoFromPic(dn, picformat,aviname)
% 将某个文件夹下某种格式的所有图片合成为视频文件
% dn : 存储图片的文件夹
% picformat : 要读取的图片的格式,如png、jpg等形式,字符串数组
% aviname : 存储的视频的文件名
% example : CreatVideoFromPic( './', 'png','presentation.avi');
if ~exist(dn, 'dir')
error('dir not exist!!!!');
end
picname=fullfile( dn, strcat('*.',picformat));
picname=dir(picname);
aviobj = VideoWriter(aviname);
open(aviobj);
for i=1:length(picname)
picdata=imread( fullfile(dn, [int2str(i),'.',picformat]));
if ~isempty( aviobj.Height)
if size(picdata,1) ~= aviobj.Height || size(picdata,2) ~= aviobj.Width
close(aviobj);
delete( aviname )
error('所有图片的尺寸要相同!!');
end
end
writeVideo(aviobj,picdata);
end
close(aviobj);
end