zoukankan      html  css  js  c++  java
  • Matlab绘图保存为视频

    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,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);

    --------------------- 

    作者:iracer
    来源:CSDN
    原文:https://blog.csdn.net/iracer/article/details/48876473
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    批量重命名文件
    文件上传漏洞靶场-upload-labs学习
    CVE-2018-12613(phpMyAdmin远程文件包含)-HCTF-2018-WarmUp
    YzmCms_SSRF漏洞
    phpokCms从CSRF到getShell
    XYHCms代码执行
    Weblogic 反序列化命令执行漏洞(CVE-2018-2628)
    Weblogic XMLDecoder反序列化漏洞(CVE-2017-10271)
    SSRF漏洞与CVE-2014-4210实例
    缓冲区溢出漏洞实例(打开记事本)
  • 原文地址:https://www.cnblogs.com/tofengz/p/10627299.html
Copyright © 2011-2022 走看看