批量输出视屏帧数图片

对视频进行处理时候,需要显示每一帧的图片,这时就需要对视屏按照帧数进行分割,然后批量输出图片

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

输出结果:

批量输出视屏帧数图片_matlab

突然感觉自己无聊了,视屏生成图片再逆向合成视屏。

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