【问题标题】:Animated plots MATLAB [closed]动画图 MATLAB [关闭]
【发布时间】:2016-01-22 15:09:17
【问题描述】:

我无法使用 MATLAB 生成动画图。

我想将 我的信号 y 绘制为 我的时间 x 的函数(我保存在两个单独的变量中),然后制作它的动画,查看变化我的信号根据时间。

最后,我想生成一系列“.tif”图像(用于在 imageJ 中读取)和一个“.avi”电影文件。

如果有人能给我指路,那真的会对我有所帮助,因为我尝试使用 MATLAB 帮助和论坛自己做,但每次都失败了。

提前致谢!

【问题讨论】:

    标签: matlab animation plot matlab-figure


    【解决方案1】:

    执行此操作的标准方法是在循环中更新您的绘图数据,并使用getframe 或类似函数来获取当前屏幕并将其保存到带有imwriteVideoWriter 的文件中。

    改写

    对于imwrite,重要的是,如果您想写入多帧数据(对于 TIFF 或 GIF),您需要使用 'WriteMode' 参数并将其设置为 'append',这样您只需添加图像的新框架。在第一次通过循环时,您想要追加,因为这会追加到可能已经存在的现有图像。

    获取帧

    getframe而言,它会抓取指定图形的屏幕截图并返回一个包含颜色图和RGB图像的结构体cdata。这是您要写入视频或多帧图像的内容。

    视频作家

    对于写入视频,您将使用行为稍有不同的VideoWriter 类。主要步骤是:

    1. 创建对象

      vid = VideoWriter('filename.avi');

    2. 打开对象

      vid.open() % or open(vid)

    3. 使用writeVideo写一些数据

      vid.writeVideo(data)

    4. 关闭视频

      vid.close()

    然后,您可以根据需要多次调用writeVideo,每次都会添加一个额外的帧。

    总结

    这是一个将所有这些结合在一起并编写多帧 TIFF 和 AVI 的演示。

    % Example data to plot
    x = linspace(0, 2*pi, 100);
    y = sin(x);
    
    
    % Set up the graphics objects
    fig = figure('Color', 'w');
    hax = axes();
    p = plot(NaN, NaN, 'r', 'Parent', hax, 'LineWidth', 2);
    set(hax, 'xlim', [0, 2*pi], 'ylim', [-1 1], 'FontSize', 15, 'LineWidth', 2);
    
    % Create a video object
    vid = VideoWriter('video.avi')
    vid.open()
    
    % Place to store the tiff
    tifname = 'image.tif';
    
    for k = 1:numel(x)
        set(p, 'XData', x(1:k), 'YData', y(1:k));
    
        % Grab the current screen
        imdata = getframe(fig);
    
        % Save the screen grab to a multi-frame tiff (using append!)
        if k > 1
            imwrite(imdata.cdata, tifname, 'WriteMode', 'append')
        else
            imwrite(imdata.cdata, tifname);
        end
    
        % Also write to an AVI
        vid.writeVideo(imdata.cdata);
    end
    
    % Close the video
    vid.close()
    

    结果(作为动画 GIF)

    【讨论】:

    • 谢谢 Suever,它工作得很好!我只需要添加“压缩”、“无”来编写 .tif。像这样" imwrite(imdata.cdata, tifname,'Compression','none','WriteMode', 'append') imwrite(imdata.cdata, tifname,'Compression','none');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 2016-09-15
    • 2021-05-13
    • 2015-08-28
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多