批量输出视屏帧数图片
对视频进行处理时候,需要显示每一帧的图片,这时就需要对视屏按照帧数进行分割,然后批量输出图片
clc clear %date:2018-10-22 %author:猪猪侠 %邮箱:2377389590@qq.com warning off video = VideoReader('tp.mp4');%读取视频注意填写位置 n=video.NumberOfFrames;%视频所有帧数 mkdir([cd,'/tp']);%创建一个文件夹tp directory=[cd,'/tp/'];%保存图片到指定文件夹tp中 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