Matlab—将绘图保存为视频VideoWrite()函数用法与自定义视频尺寸


Matlab—绘图保存为视频VideoWrite()函数用法与自定义视频尺寸



1.早期版本的avifile()函数

Matlab中提供了将显示图形保存成视频的功能。早期的版本使用函数avifile()来创建视频文件用于存储动画

vedioObj = avifile(filename,'PropertyName',value,'PropertyName',value,...); %// 创建视频文件

avifile()函数的使用方法和例子可以参看

http://www-rohan.sdsu.edu/doc/matlab/techdoc/ref/avifile.html

http://www.cnblogs.com/wb-DarkHorse/p/3171418.html

2.VideoWrite()函数

在使用Matlab2012时,发现avifile()已经被新的类VideoWriter()取代。

VideoWrite函数,配合open,writeVideoclose方法从图像(figure)中创建视频文件、静态图像或Matlab视频。VideoWrite函数可以创建AVIMotion JPEG 2000格式的视频文件,这些文件在多平台上都能播放,也可以创建在window平台上播放的MPEG-4文件。VideoWrite函数支持大于2GB的视频文件。VideoWrite函数使用预先定义的属性来设置视频属性,例如'Uncompressed AVI' or 'MPEG-4'等。创建视频文件:

writerObj = VideoWriter(filename,profile) 

VideoWrite函数有两个输入参数:filename和profile。

(1)VideoWrite()函数参数:filename

单引号引用的字符串指定视频文件名。文件名可以加扩展名,也可以不加扩展名。Matlab支持的视频文件扩展名如下表所示:


如果文件名不指定扩展名,VideoWrite函数将根据profile 的设置来自动加上.avi,.mj2,.mp4 或者.m4v的扩展名,如果没有设置profile的值,VideoWrite函数默认保存为.avi文件。

(2)VideoWrite()函数参数:profile

使用单引号引用的字符串,描述了创建视频的类型。


profile的缺省值为'Motion JPEG AVI'。

(3)VideoWrite()函数:操作方法

VideoWrite函数还有许多操作方法帮助我们完成写视频和获取视频属性的工作,例如:

close               Closefile after writing video data 写完视频数据后关闭文件

getProfiles     List profiles and file formats supportedby VideoWriter 列出VideoWriter支持的配置和文件格式

open               Openfile for writing video data 打开视频

writeVideo     Write video data to file 写视频

3.写视频的步骤

写视频的步骤主要包括

  • 创建视频并打开该视频文件
  • 在循环中获取图像中的帧
  • 将帧写入视频文件
  • 循环结束后关闭视频文件

以下举上一篇博文绘制半径逐渐变化的圆及扫描线段的例子说明将绘图保存成视频的方法。

(1)创建并打开视频文件

在代码初始化阶段创建一个视频文件,指定其名称,并打开该视频文件。

    writerObj=VideoWriter('test.avi');  %// 定义一个视频文件用来存动画
    open(writerObj);                    %// 打开该视频文件

(2)在循环中获取图像帧并写入视频

写入视频的前提是不断获取图像帧,而这一步骤则是每次更新figure上的图形后来完成,即在绘图循环中,所有图形重绘结束后,使用getframe方法获取当前figure上的图像并写入打开的视频文件

 frame = getframe;            %// 把图像存入视频文件中
 writeVideo(writerObj,frame); %// 将帧写入视频

(3)循环结束后关闭视频文件句柄

循环结束后(想要记录的图像全部绘制完毕后),别忘了关闭视频文件句柄

close(writerObj); %// 关闭视频文件句柄

创建到工作目录下的测试视频文件

4.自定义视频的像素尺寸

VideoWrite()函数默认根据第一帧的大小决定保存视频高和宽,并且没有给出自定义视频尺寸的方法。网上搜了很久,没有找到如何改变保存视频像素尺寸的方法。设置断点调试,发现frame=getframe;获取的帧frame为一个结构体,包含两个成员:

frame的结构
cdata为数据,colormap为调色板。cdata的尺寸378×607就是第一帧读取的图像的尺寸,VideoWrite()函数将默认以该尺寸保存所有图像帧到视频文件。
有时,图像绘制过程中,如果曲线的尺寸会随时间变化:变小不会有问题,而如果曲线尺寸超过378×607就会出错。为了避免因此造成的错误,可以通过在读完每一帧后改变该帧的尺寸,来实现将视频保存成自定义的长宽,不足的部分自动用figure的底色填充。
            frame = getframe;
            frame.cdata = imresize(frame.cdata, [H W]); %// 设置视频宽高:H为行数(高),W为列数(宽)
            writeVideo(writerObj,frame);

转载请注明:iracer的CSDN博客  http://blog.csdn.net/iracer/article/details/48876473
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值