MATLAB绘制动画(五)GIF

GIF这个文件大家就比较熟悉了,我们通常当做表情包的动图一般都是用GIF格式。

这是因为GIF格式的文件比较小,传输速度快。

用MATLAB生成GIF图像同样需要将图像保存下来,通过循环展示动画

代码如下:

clc;
clear;
close all;
set(gca,'NextPlot','replaceChildren','box','off','color','w');

numFrames = 5;
for k = 1:numFrames
    plot(fft(eye(k+16)));
    axis([-1 1 -4 1]);
    axis equal
    f(k) = getframe(gcf);
end
movie(f,5)

animated(1,1,1,numFrames) = 0;
for k = 1:numFrames
    if k == 1
        [animated,cmap] = rgb2ind(f(k).cdata,256,'nodither');
    else
        animated(:,:,1,k) = rgb2ind(f(k).cdata,cmap,'nodither');
    end
end
filename = 'fftmov.gif';
imwrite(animated,cmap,filename,'DelayTime',0.5,'LoopCount',5);
web(filename)

结合上一篇中对于avi的讲解,上述代码很好理解

首先,第一部分清楚多余的数据,并对坐标轴进行设置。

具体来说,我们设置坐标轴‘NextPlot’属性,使得不会随着图形的刷新发生变化。

box属性决定坐标轴会不会包括边框,这里取消了边框的显示

color属性决定坐标轴的颜色

接下来的一段,我们在图窗中绘制了图形,并使用getframe函数将图窗中的图形存储在矩阵中,作为一帧

最后一段,我们生成GIF文件并储存。

animated函数:

我们之前用跟它很像的animatedline来生成质点动画:

an = animatedline 创建一根没有任何数据的动画线条并将其添加到当前坐标区中。通过使用

addpoints 函数循环向线条中添加点来创建动画。

可以联想到,这应该也是创建一个图形。

在存储图形时,我们用到了rgb2ind函数的下列功能:

[X,cmap] = rgb2ind(RGB,Q) 使用具有 Q 种量化颜色的最小方差量化法并加入抖动,将 RGB 图像转换为索引图像 X,关联颜色图为 cmap。

X = rgb2ind(RGB,inmap) 使用逆颜色图算法并加入抖动,将 RGB 图像转换为索引图像,指定的颜色图为 inmap。

总的来说,我们把从图窗中直接导出的图像,转化为索引图像。

最后是:

imwrite(animated,cmap,filename,'DelayTime',0.5,'LoopCount',5);

我们将索引图像数组animated、对应的颜色图cmap、储存的文件名filename输入给函数,并设置每一帧的延迟时间为0.5s,重复次数为5次。

% imwrite(A,filename)
% imwrite(A,map,filename)

imwrite(A,map,filename) 将 A 中的索引图像及其关联的颜色图 map 写入由 filename 指定的文件。

默认的情况下,重复次数是inf

如果上述代码实现时间较长,可以用生成AVI的简易图形测试:

clc;
clear;
close all;
fig = figure ;
n = 100;
t = 0:2*pi/n:2*pi;
x = cos(t);
y = sin(t);
for k = 1:n
    x(k) = cos(t(k));
    y(k) = sin(t(k));
    H = plot(x,y,x(k),y(k),'or',x(k),-y(k),'ob');
    axis equal
    grid on
    MOV(k) = getframe(fig);
end
animated(1,1,1,n) = 0;
for k = 1:n
    if k == 1
        [animated,cmap] = rgb2ind(MOV(k).cdata,256,'nodither');
    else
        animated(:,:,1,k) = rgb2ind(MOV(k).cdata,cmap,'nodither');
    end
end
filename = 'fftmov.gif';
imwrite(animated,cmap,filename,'DelayTime',0.5,'LoopCount',5);
web(filename)

 可以得到:

 

参考《高等光学仿真——光波导、激光》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21635.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4)

AMBER分子动力学模拟之结果分析(MMGB/PBSA)-- HIV蛋白酶-抑制剂复合物(4) 结合自由能计算 我们首先计算焙变,用到的是pbsa和gbsa方法。我们需要一下文件 三个top文件,pro.prmtop lig.prmtop com.prmtop;输入文件MM_GBSA.in;将要…

从桌面端到移动端,.NET MAUI为什么对WPF开发人员更简单?

.NET多平台应用程序UI(. NET MAUI)的市场吸引力与日俱增,这是微软最新的开发平台,允许开发者使用单个代码库创建跨平台应用程序。尽管很多WPF开发人员还没有跟上 .NET MAUI的潮流,但我们将在这篇文章中为大家展示他的潜…

【FAQ】视频编辑服务常见问题及解答

Q1问题描述 1、 访问贴纸等素材的时候提示“网络异常,请重试”怎么办? 2、 使用AI能力时,提示“errorCode:20124 errorMsg:Method not Allowed”? 解决方案 请做以下检查: 1、 在代码中检查鉴权信息是否已设置。如…

2023/5/21周报

目录 摘要 论文阅读 1、标题和现存问题 2、各个结构 3、基于GNN-LSTM-CNN 网络轨迹预测模型 4、实验准备 5、实验结果 深度学习 1、费舍尔判别 2、步骤具体化 3、GCN 总结 摘要 本周在论文阅读上,阅读了一篇基于GNN-LSTM-CNN网络的6G车辆轨迹预测算法的…

RabbitMQ如何保证顺序性

1. RabbitMQ消息顺序性说明 顺序性: 消息的顺序性是指消费者消费到消息和发送者发布的消息的顺序是一致的 举个例子,不考虑消息重复的情况下,如果生产者发布的消息分别为msg1、msg2、msg3 那么消费者必然也是按照 msg1、msg2、msg3 的顺序来…

【leetcode刷题总结】——代码随想录(链表总结)

代码随想录按照数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心->动态规划->图论->高级数据结构,再从简单刷起,做了几个类型题目之后,再慢慢做中等题目、困难题目。 以下是个人刷题总结,官…

Python初学小知识(十四):数据分析处理库Pandas

Python初学小知识(十四):数据分析处理库Pandas 十八 Pandas1 文件读取1.1 读取csv1.2 读取txt1.3 读取excel(xlsx) 2 内容读取2.1 读取行2.2 读取列 3 数据处理3.1 加减乘除3.1.1 列 与 元素3.1.2 列 与 列 3.2 最值、…

张驰咨询:突破瓶颈降低成本-精益生产咨询的实践策略

在现代企业运营中,提高效率、优化流程是实现成功的关键因素之一。为了帮助企业在这方面取得突破性的进展,精益生产咨询成为了一种备受推崇的方法。本文将介绍精益生产咨询的基本原理、优势以及如何将其应用于企业实践中。 精益生产咨询是一种源于丰田生…

lwIP更新记02:网络接口标志(一个标志只做一件事)

从 lwIP-2.0.0 开始,网络接口 netif 的 up 标志修改为管理标志,up标志不再具有以前的 IP4 地址有效 含义。 什么是网络接口 netif ? 网络接口 属于链路层范畴,它旨在对具体网络硬件、软件进行统一封装,并为协议栈上层&…

【运维知识进阶篇】集群架构-Nginx反向代理详解

在互联网请求中,客户端通常无法直接向服务端发起请求,就需要用代理服务,来实现客户端和的交互,起到一个中介的作用。 Nginx代理服务常见模式 Nginx代理按照应用场景模式可以分为正向代理和反向代理。 正向代理是内部上网过程中&a…

实现取关和关注功能

将关注过的用户id存如数据库中 //关注或者取关 Override public Result follow(Long id, Boolean flag) { //1.获取当前登录用户的id UserDTO user UserHolder.getUser(); if(usernull){ return Result.fail("请先登录"); } Long userId user.getId(); //2.判断是关…

关于ubuntu20.04 apt 安装源中搜索不到最新版本gcc 12的问题

一、问题描述 最近在搞Open 3d 点云point cloud 相关的东西,过程需要安装较高版本的cmake 3.20版本以上,3.20版本又需要gcc 更高版本 至少11.0以上,理论上本机配置的有 ubuntu 官方的源和阿里云的源,不过 通过搜索就只能搜索安装的…

微信小程序xr-frame实现交互(地月案例)

基础知识: 1.轮廓 如果想要与场景中的物体进行互动,比如说点击、拖拽物体,那么这个物体得先拥有一个轮廓才行。轮廓是一个组件。与某个物体互动,实际上是在与这个物体的轮廓进行互动,轮廓让这个物体在物理世界中拥有…

WordPress 如何开启多站点 含Apache和Nginx伪静态规则

WordPress 3.0以上的版本支持直接开启多站点模式,这样一来,你可以在一个后台切换多个站点进行管理。 最近打算折腾一个主题演示站,给每个主题使用独立的子站点来搭建演示,如果是Apache环境,配置就比较容易,但是倡萌使用的是 Nginx,花了大量的时间测试了N多网络上的伪静…

Weblogic SSRF 漏洞(CVE-2014-4210)

SSRF漏洞 ​ SSRF(服务端请求伪造),指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。 ​ 简单的说就是利用一个可…

Jenkins的持续集成与持续部署

系统总体架构 Gitlab Gitlab是一款主要用于代码管理的工具,相较于GitHub,可以自己搭建服务器,这可以避免因为网络速度慢导致部署效率低下,同时,自己搭建服务器,安全性更高。Jenkins Jenkins主要用于管理版本…

国内免费版ChatGPT

目录 前言:网站大全 1. ChatGPT是什么 2. ChatGPT的发展历程 3. ChatGPT对程序员的影响 4. ChatGPT对普通人的影响 5. ChatGPT的不足之处 前言:网站大全 AI文本工具站 (laicj.cn) ——gpt-3.5 功能强大(推荐) Chatgpt在线网页版-…

Compose For Desktop 实践:使用 Compose-jb 做一个时间水印助手

前言 在我之前的文章 在安卓中实现读取Exif获取照片拍摄日期后以水印文字形式添加到照片上 中,我们已经实现了在安卓端读取 Exif 信息后添加文字水印到图片上。 也正如我在这篇文章中所说的,其实这个需求使用手机来实现是非常不合理的,一般…

jenkins入门与安装

一、实验环境 selinux iptables off 主机名IP系统版本gitlab10.10.10.200rhel7.5jenkins10.10.10.10rhel7.5tomcat10.10.10.11rhel7.5 二、安装jenkins 1、解压安装包 下载地址:https://download.docker.com/linux/static/stable/x86_64/ [rootjenkins ~]# tar xf …

视频截取动图怎么做?分享在线视频转gif小窍门

如何将一段视频制作成gif动图表情包呢?Gif表情包常见的制作方法就是将电影、电视剧中的某个画面截取出来做成gif表情包。那么,如何从视频中截取GIF呢? 一、怎样才能完成视频转gif制作? 通过使用GIF中文网的视频转gif&#xff08…