matlab提取视频流与图片成视频

来源:互联网 发布:cs1.6参数优化 编辑:程序博客网 时间:2024/05/16 06:48

 1.如何从视频流中提取图像

    2008以前的版本中提供了aviread这个方法用于读取avi文件,但由于该接口要求avi文件是没有压缩的,这导致其应用非常受限,经过从网上大量的资料搜索,发现了mmreader这个接口,它可以读多种类型的文件,如avi,rmvb,wmv等;同时matlab中提供的aviinfo函数,可以获得avi文件的一些信息,如帧长,时长,帧率,大小等;

    下面的程序演示了将视频转换成图片并保存的示例:

    fileName='vedio.avi';
    videoInfo=aviinfo(fileName);
    %videoInfo.FramesPerSecond; %帧率
    %videoInfo.NumFrames;%帧数
    for i=1:videoInfo.FramesPerSecond:videoInfo.NumFrames
       temp=mmreader(fileName,i);  %获得图片对象
       t=temp.frames.cdata(:,:,:); %转化成图片
       strtemp=strcat('D:\work\picture\',int2str(i),'.','bmp');    
       imwrite(t,strtemp);
   end 

   获取图片的方法中,采用了两个参数的形式,每次读取一帧到内存,这样是防止视频过大导致内存溢出。

 2. 将图片成avi文件

     pfrom=1;pto=200; pext='.bmp';

     navi='tt.avi'; %构造avi文件

     aviobj = avifile(navi);    

     aviobj.Quality = 100;
     aviobj.compression='None';

     for i=pfrom:pto
          fname=strcat('picture\',num2str(i),pext);
          adata=imread(fname);
          aviobj = addframe(aviobj,uint8(adata)); %向avi文件中加帧,转成8位的格式
    end

    aviobj=close(aviobj);



0 0