matlab main函数_Python 和MATLAB 制作Gif 图像

主要内容概述:

  • 预备知识
  • MATLAB 代码实现GIF
  • 使用imageio 生成GIF
  • 使用animation 交互式方式生成GIF
  • 总结

0,预备知识

首先了解下什么是GIF 图片,以及常用的图片格式。

GIF的全称是Graphics Interchange Format,可译为图形交换格式,用于以超文本标志语言(Hypertext Markup Language)方式显示索引彩色图像,在因特网和其他在线服务系统上得到广泛应用。GIF是一种位图。位图的大致原理是:图片由许多的象素组成,每一个象素都被指定了一种颜色,这些象素综合起来就构成了图片。

一图胜千言,GIF 动图更是图片中的战斗机!

下面我们就分别从Python 和MATLAB 介绍Git 动图的制作方法。

一,在MATLAB 中实现GIF动图制作

效果:下面是一个制作矩形函数和其频谱的动图。

Note:主要的思想就是画出第一张图,然后在追加第二张,第三张图,并设置其延时时间

主要函数介绍:

1 Getframe 函数

F = getframe(h) gets a frame from the figure or axes identified by handle h.

获取句柄定义的图片或是坐标的一帧。

如果想获得图片的一帧使用的语法为。

F = getframe(gcf);

2 frame2im

Return image data associated with movie frame

帧图画转换为图像数据

3 rgb2ind

Convert RGB image to indexed image

将RGB 图片转换为索引图片

4 imwrite

Imwrite (A, filename,fmt) writes the image A to the file specified by filename in the format specified by fmt.

5 完整代码如下:

clc; clear all; close all;
N=10000; % sampling numbers
Tau0=1;  % define initial Tau
pic_num = 1;
for i=1:100Tau=Tau0/i; TimeRange=linspace(-10*Tau,10*Tau,N);  % display time rangeFreqRange=linspace(-200*pi/i,200*pi/i,N);  % display frequency rangeHalf_Tau=Tau/2; % -0.5 Tao ==> 0.5 TaoRECT=1/Tau*double(abs(TimeRange)<Half_Tau);  % one rectangular pulseSINC=sinc(FreqRange*Tau*pi);   % sinc pulse, Xtrasubplot(2,1,1);plot(TimeRange,RECT,'LineWidth',1.5); grid on;xlim([-1 1]); ylim([-0.5 120]);xlabel('Time'); ylabel('Amplitude');subplot(2,1,2);plot(FreqRange,SINC,'LineWidth',1.5); grid on; xlim([-200*pi/i 200*pi/i]); ylim([-0.5 1.5]); xlabel('Frequency'); ylabel('Amplitude');drawnow;F=getframe(gcf);I=frame2im(F);[I,map]=rgb2ind(I,256);if pic_num == 1imwrite(I,map,'impulse.gif','gif', 'Loopcount',inf,'DelayTime',0.1);elseimwrite(I,map,'impulse.gif','gif','WriteMode','append','DelayTime',0.1);endpic_num = pic_num + 1;
end

d9dd08bc8b507a9b2af35dc51ee4b34f.gif

二,Python 中GIF动图的绘制

1,使用imageio 生成GIF 动态图像

IMAIO是一个Python库,它提供了一个简单的接口来读取和写入大量的图像数据,包括动画图像、体积数据和科学格式。它是跨平台的,运行在Python 2 .x和3.x上,并且易于安装。

imageio.imread() #从指定的文件读取图像。返回一个NUMPY数组,该数组带有元数据的元属性。注意,图像数据按原样返回,并且可能不总是具有uTI8的dType。

def createGif():images = []filenames=sorted((fn for fn in os.listdir('image') if fn.endswith('.png')))# 分解顺序和合成顺序不一致,造成Gig 混乱n = len(filenames)for i in range (0,n):filename =str(i)+'.png'if (filename in filenames):images.append(imageio.imread('image'+filename))
imageio.mimsave('gif.gif', images,duration=0.1)
def main():processImage('impulse.gif')createGif()
if __name__=='__main__':main()

2,使用animation 交互式方式

介绍:使用animation function 来动态的显示一个sin函数。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
x = np.linspace(0, 10, 100) # 生成测试数据
y = np.sin(x)fig, ax = plt.subplots()
line= ax.plot(x, y, color='k')def update(num, x, y, line): #num表示迭代次数line.set_data(x[:num], y[:num])line.axes.axis([0, 10, -1.2, 1.2])return line,

FuncAnimation函数生成动画。参数说明:

#fig 进行动画绘制的figure 的句柄

#func 自定义动画函数,即传入刚定义的函数animate

#frames 动画长度,一次循环包含的帧数

#fargs 除帧数之外的其他需要调用的参数

#init_func 自定义开始帧。

#interval 更新频率,以ms计

#blit 选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示动画

# 调用FuncAnimation 生成GIF 动画

ani = animation.FuncAnimation(fig, update, len(x), fargs=[x, y, line],

interval=25, blit=True,repeat= True)

ani.save('test.gif') # 保存成GIF动态图格式

plt.show()

fc676c2a5d3a59db6a3f8c48aade617e.gif

总结:

本文主要讲述了GIF 图片格式及用MATLAB 和Python的实现方式。

其中Python实现介绍了两种方式:1用现有的图片生成。2使用animation函数实现。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORB-SLAM2的特征提取算法

ORB-SLAM2跟踪线程对相机输入的每一帧图像进行跟踪处理&#xff0c;如下图所示&#xff0c;主要包括4步&#xff0c;提取ORB特征、从上一帧或者重定位来估计初始位姿、局部地图跟踪和关键帧处理。 以下结合相关理论知识&#xff0c;阅读ORB-SLAM2源代码&#xff0c;从而理解ORB…

引导界面图标好大_游戏里那些图标和界面,原来是这么设计出来的?

UI设计最硬核的思维 就是功能微信现在在做一种全面连接的功能&#xff0c;而游戏需要实现的是人机互动的功能。实现并完善功能&#xff0c;是互联网、游戏、网站、渴望UI人才的根本原因。如果说有电脑的世界是一片很大的面&#xff0c;那么可视化的操作&#xff0c;都是UI设计师…

爬格子呀9.17(图论)

刘汝佳的紫书差不多就告一段落吧&#xff0c;我觉得可以了&#xff0c;怎么说呢&#xff0c;这书也陪着自己走了一年多了吧&#xff0c;也目睹了从一个啥也不会的萌新到一个稍微会一点的萌新的转变。 差不多开始下本书吧&#xff0c;自己也大三了&#xff0c;时间真的有点紧啊w…

一个vue加egg.js的博客

之前自己的博客是用hexo做的&#xff0c;后面想做一个有后台的博客就打算用vue加node来试试&#xff0c;于是就有了这个博客。 项目地址 W-Blog W-Blog是一个基于vue和node的小小小博客 前端用vue&#xff0c;后端用egg.js 快速入门 技术栈 前端&#xff1a; 用户端&#…

android音量图标不见了,电脑声音图标不见了如何解决?

最近有电脑用户反映&#xff0c;看视频时觉得声音太小了&#xff0c;要调大点声&#xff0c;却发现任务栏上的声音图标不见了&#xff0c;想调个声音都难。那么&#xff0c;电脑声音图标不见了如何解决呢?我们一起往下看看。方法步骤一、XP系统下找回任务栏上的声音图标1、重启…

认识iOS系统架构

关于本文&#xff1a; 文章主要介绍iOS系统架构中的四层结构的内容、常用的框架、大致的功能&#xff0c;然后对iOS开发人员的发展提出自己的一些拙见。 一、iOS系统是基于UNIX系统&#xff0c;所有从系统稳定性上来说的确比其他操作系统的产品要好。 iOS在系统架构上分为4层&a…

Java泛型教程–示例类,接口,方法,通配符等

泛型是Java编程的核心功能之一&#xff0c;它是Java 5中引入的。如果您使用的是Java Collections &#xff0c;并且版本5或更高版本&#xff0c;则可以肯定使用了它。 在集合类中使用泛型非常容易&#xff0c;但是它提供了比仅创建集合类型更多的功能&#xff0c;我们将在本文中…

html5中音乐播放器怎么写,打造属于自己的音乐播放器 HTML5之audio标签

我的音乐播放器HTML5中增加了Audio和Video标签&#xff0c;这两个标签的用法非常相似。功能却是相当强大&#xff0c;我们先来看一下Audio标签各个浏览器的支持情况。这里用的依然是Can I Use这个在线网站&#xff0c;相信学习前端的同学应该都不陌生。Can I Use我们可以看到&a…

初识react(四) react中异步解决方案之 redux-saga

回顾 初识react(一) 揭开jsx语法和虚拟DOM面纱初识react(二) 实现一个简版的html redux.js的demo初识react(三)在 react中使用redux来实现简版计数器初识react(四) react中异步解决方案之 redux-saga初识react(五) 数据流终极解决方案 dva(零配置) 今天demo是实现一个异步的计…

C# WinFrom 关于MDI

dev是一个牛B 到没边的控件 我们正常用winform做个原始mdi窗体 一点都不好看 但 用的dev只需要一个控件 就可让显示舒服多了 建一个项目 上边放一个 xtraTabbedMdiManager1 一个button1 button1.click如下&#xff1a; Form frm new Form(); frm.MdiParent this; frm.Text &…

Jfinal 文件上传

JFinal上传文件 uploadify 可以在http://www.uploadify.com/ 下载。 在原项目的基础上。 uploadify使用&#xff1a; <input id"file_upload_1" name"file_upload" type"file" multiple"true"> /** param uploader 文件上传方法…

轻量级的开源集成:Apache Camel还是Spring集成?

首先&#xff0c;为全面披露信息&#xff0c;在过去的1.5年中&#xff0c; 我一直担任 FuseSource&#xff08;现为Red Hat&#xff09; 的顾问&#xff0c;为零售&#xff0c;运输&#xff0c;银行/金融等不同行业的大型和小型公司提供SOA和集成项目支持。我的专长是使用该领域…

WePY:在质疑中前进 | 文末福利

WePY 作者介绍 Q: 先介绍一下自己吧~ Gcaufy: 我 2011 年大学毕业之后&#xff0c;阴错阳差的走上了 Web 开发的道路。15 年之前算是自由职业 SOHO 工作&#xff0c;主要给一些国外的大公司做外包系统&#xff0c;更多的是做后端开发。15 年之后以前端工程师的身份加入腾讯&a…

MySQL/MariaDB表表达式(3):视图

视图是表表达式的一种&#xff0c;所以它也是虚拟表。对视图操作的时候会通过语句动态的从表中临时获取数据。 1.创建、修改视图 CREATE [OR REPLACE][ALGORITHM {UNDEFINED | MERGE | TEMPTABLE}]VIEW [IF NOT EXISTS] view_name [(column_list)]AS select_statement[WITH [C…

Event Loop 其实也就这点事

前段时间在网上陆续看了很多关于 Event loop 的文章&#xff0c;看完也就混个眼熟&#xff0c;可能内心深处对这种偏原理的知识有一些抵触心情&#xff0c;看完后也都没有去深入理解。最近在看 Vue 的源码&#xff0c;在读到关于 nextTick 的实现时&#xff0c;总有一种似曾相识…

Kudu系列: Kudu主键选择策略

每个Kudu 表必须设置Pimary Key(unique), 另外Kudu表不能设置secondary index, 经过实际性能测试, 本文给出了选择Kudu主键的几个策略, 测试结果纠正了我之前的习惯认知. 简单介绍测试场景: 表中有一个unqiue字段Id, 另外还有一个日期维度字段histdate, 有三种设置kudu PK的方法…

OSS网页上传和断点续传(OSS配置篇)

OSS网页上传和断点续传主要根据BrowserJS-SDK和相关文档整理而得&#xff0c;快速构建OSS上传应用 一、Bucket设置 浏览器中直接访问OSS需要开通Bucket的CORS设置 将allowed origins设置成 *将allowed methods设置成 PUT, GET, POST, DELETE, HEAD将allowed headers设置成 *将e…

小程序各种姿势实现登录

喜闻乐见的背景时间--由于最近接触小程序比较多&#xff0c;又刚好经历过小程序的自动登录时代以及现在的点击登录时代。结合自己的实践以及观察到其他小程序的做法&#xff0c;就有了这篇小分享~ 本文可能涉及的内容-- 更新 首先感谢shaonialife同学的精彩评论~ 可能由于用词…

BBS-登录

from django.db import models# Create your models here. from django.contrib.auth.models import AbstractUser#用户 class UserInfo(AbstractUser):nidmodels.AutoField(primary_keyTrue)telephonemodels.CharField(max_length32)avatarmodels.FileField(upload_toavatar/,…

使用Mockito和BeanPostProcessors在Spring注入测试双打

我非常确定&#xff0c;如果您曾经使用过Spring并且熟悉单元测试&#xff0c;那么您会遇到与您不想修改的Spring应用程序上下文中注入模拟/间谍&#xff08;测试双打&#xff09;有关的问题。 本文介绍了一种使用Spring组件解决此问题的方法。 项目结构 让我们从项目结构开始&…