Matlab—绘图保存为视频VideoWrite()函数⽤法与⾃定义视
频尺⼨
Matlab—绘图保存为视频VideoWrite()函数⽤法与⾃定义视频尺⼨
1.早期版本的avifile()函数
Matlab中提供了将显⽰图形保存成视频的功能。早期的版本使⽤函数avifile()来创建视频⽂件⽤于存储动画
vedioObj = avifile(filename,'PropertyName',value,'PropertyName',value,...); %// 创建视频⽂件
2.VideoWrite()函数
在使⽤Matlab2012时,发现avifile()已经被新的类VideoWriter()取代。
VideoWrite函数,配合open,writeVideo和close⽅法从图像(figure)中创建视频⽂件、静态图像或Matlab视频。VideoWrite函数可以创建AVI和Motion 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);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。