保存图像_06 - matplotlib中应知应会numpy存储、交换图像

matplotlib中应知应会numpy存储、交换图像

numpy的ndarray是mpl官方推荐的输入数据结构

mpl官方推荐绘图时,应以numpy的ndarray数据结构输入数据。虽然有时用pandas中的两个数据结构、python的list等数据结构也可以,但不能保证都能成功。

这是因为numpy的ndarray的结构设计天生具有保存、交换、变换图像数据的优势。

本篇:

  • 将一幅image转换为ndarray保存起来;
  • 再在mpl的fig中读取保存的ndarray,并显示出该image;
  • 并分析ndarray保存image的基本思想。

在mpl中,很多对象的一些参数设置都要借助ndarray的变换来实现一些绘图效果。因此理解ndarray保存图像,对后面学习相关内容非常有帮助。

阅读前两篇关于像素和分辨率的文章,会让你阅读本篇更轻松。

将一幅image存入ndarray

仍然以上篇中用到的这幅image为例:原图像可以到"Python草堂“QQ群下载。

9fc0e13c227fc8b1182878ffdee8ea5f.png

img2array.jpg

输入如下代码:

import numpy as npfrom PIL import Imageim_source = Image.open('./assets/img2array.jpg') #应该修改成你的image保存的路径im_ar = np.array(im_source)np.save('./assets/imgdata.npy',im_ar)# 同样要修改为你保存数据文件的目录im_ar.shape
9123df6b2612ef37decb4f77661fe361.png

注意:上面的代码需要Python的 PIL库的支持

上面的代码完成了这么几件事:

  1. 读取了磁盘上的"img2array.jpg"图像;
  2. 将图像数据转换为数组;
  3. 将数组保存为磁盘文件“imgdata.npy"
  4. 查看了这个数组的形状是:(344, 250, 3)

ndarray保存图像的方式解析

上面的第4个任务显示,图像数据被保存在一个(344, 250, 3)的3维数组中。

你如果读了上一篇,应该记得,这个(344, 250)正是该image的像素大小:

363f7c1e2b2a6fa68a2145c2398c38c6.png

没错,numpy就是用这样一个3维数组保存image数据的:

  • image高度上的像素个数是ndarray的行数,这里是344行;
  • image宽度上的像素个数是ndarray的列数,这里是255列;
  • 行列交叉位置,就是图像的坐标位置了,即每个像素单元格上,再用一个有3个元素一维数组表示该像素的颜色 [R, G, B] 值。

如下图所示,每个格子是一个像素,每个格子上的3元素的列表就是该像素上的 [R, G, B] 值。

72652f46de2cc52118a942a35320292a.png
74b03bbd97350edb12641efe2946c565.png
使用:im_ar[12][27]检索,返回一个array([247, 176, 148]

我们就知道第13行,第28列上的像素的颜色是 [247, 176, 148],在配色软件上检索这个值:

b8bf469956319901c12e8f62b3cfa069.png

[247, 276, 168]

numpy就是这样用ndarray保存image的。是不是豁然开朗了!

读取ndarray,显示出图像

我将生存的ndarray数据文件放到了"Python草堂"群文件的DataSets文件中,供大家下载。

输入如下代码:

注意:这是纯面向对象绘图的代码,所以看起来代码比较多,但每一步在做什么,我都很清楚。

from matplotlib.backends.backend_agg import FigureCanvasAggfrom matplotlib.figure import Figure,SubplotParamsimport numpy as npfig =Figure(figsize=(1.1,1.4), dpi=300, facecolor=(239/256,239/256,239/256), edgecolor=(82/256,101/256,155/256), linewidth=2.0, frameon=True, )canvas = FigureCanvasAgg(fig)imgdata = np.load('./assets/imgdata.npy',)fig.figimage(imgdata,xo=40,yo=30,origin='upper')s, (width, height) = canvas.print_to_buffer() from PIL import Imageim = Image.frombytes("RGBA

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

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

相关文章

css设置按钮竖直方向居中_如何借助伪元素实现垂直居中?

点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!今天给大家讲一种实现垂直居中的方法:伪元素法(::before/::after)一、vertical-align实现了什么?先来看一下vertical-align实现了什么&#xff0…

ajax和fetch哪个好,axios和ajax,fetch的区别

1,传统 Ajax 指的是 XMLHttpRequest(XHR), 最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱。JQuery ajax 是对原生XHR的封装&am…

九年级数学解方程50道_【初中数学】北师大版九年级上册数学知识点总结

这里整理了一份【初中数学】北师大版九年级上册数学知识点总结其他版本的总结后面会更新资料有点多,建议先收藏完整版资料下载可搜【初中复习资料】回复【399】(资料整理不易,可以收藏-转发支持一下吗)资料有点多,建议…

按钮传值给ajax,用jquery和ajax实现分页时,按钮怎么给jquery传值?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼function changepage(page){$.post("pages.php",{page:page},function(data){$("#pagetable").html(data);})}$(document).ready(function(){changepage(1);$("#firstpage").click(function(){chang…

小米9私密相册怎么找_“拼藏搜”,手机相册还能这么玩

发朋友圈九图不够看?私密照片不想被轻易看到?照片太多找半天太麻烦?别着急,学会这几招,成为“制片人”。第一招:“拼”成为“制片人”的第一步,当然是制作照片了!拼出有feel的图就靠…

路由虚拟端口配置dhcp服务器,交换机和路由器DHCP设置中的端口配置

在利用交换机和路由器进行DHCP的设置的时候,端口的配置是非常重要的。这里我们就来针对这个情况进行一下实例讲解。网络环境:一台3550EMI交换机,划分三个vlan,vlan2 为服务器所在网络,命名为server,IP地址段为192.168.2.0,子网掩码…

idea python工程zip打包_【面试划重点】-- Python常见知识点

分享工作中遇到的python知识点,估计很多人没太留意过这个知识点,但是对巩固很多基本语法和一些python中一些有用的方法很有帮助,工作中的问题我简化说下,大概就是下面需求:有3个python列表:分别是年龄&…

微软codepush搭建服务器,通过 CodePush API 参考对本机 SDK 作出响应 - Visual Studio App Center | Microsoft Docs...

响应 Native Client SDK API 参考02/19/2020本文内容CodePush 插件由以下两个组件组成:可以导入/要求的 JavaScript 模块,并允许应用在运行时与服务交互 (例如,检查更新、检查有关当前正在运行的应用更新) 的元数据。本机 API (目标-C 和 Jav…

如何固定最小宽度_如何使用更新的HTML和CSS函数创建响应式设计

除了使用媒体查询和现代css布局(如flexbox和grid)来创建响应式网站外,我们还可以做好某些被忽视的事情来制作响应式网站。在本文中,我们将探讨许多可用的工具(围绕html和css),从响应图像到相对较新的CSS函数,无论我们是否使用媒体…

查找服务器大文件内容,Linux查找大文件命令,springmvc基础面试题

1、查询服务器中大于1G的文件find / -type f -size 1G查询结果如下:[rootlocalhost ~]# find / -type f -size 1G/var/lib/mysql/darkindustry/tbl_jm_account.ibd/var/lib/mysql/tase1/key_timing_3.ibd/var/lib/mysql/tase1/news_info_bak_1.MYD/var/lib/mysql/my…

vue 微信公众号支付接口_vue实现微信公众号支付DEMO

预备工作连接电源打开你的电脑打开你的vscode获取appidnpm install weixin-js-sdk开撸在你的支付按钮上添加一个事件、代码为:var url https://open.weixin.qq.com/connect/oauth2/authorize?appid输入你的appid&redirect_urihttp://tdjl.kurongdashi.com?pa…

如何将文件二进制传输至aix服务器,有什么办法把文件从WINDOWS系统中传到AIX中?...

有什么办法把文件从WINDOWS系统中传到AIX中?(2011-12-21 04:19:38)标签:杂谈有什么办法把文件从WINDOWS系统中传到AIX中?我有一台笔记本可以远程登陆170和F85,两台都是AIXV5.2,原来ML是04,想升级&#xff0…

小米手机硬改技术_小米11手机爆料:首发骁龙875 或采用屏下摄像头技术

12月1日高通应该就要公布骁龙875处理器,而对于这颗2021年的旗舰芯片,小米手机必然要抢首发,这也是他们一贯的传统。据最新消息称,小米11手机有望首发骁龙875处理器,不过这款手机预计要在明年3月份左右推出,…

小企业文件打印服务器,小企业云服务器方案

小企业云服务器方案 内容精选换一换在“确认配置”页面,查看云服务器配置详情。如果您对价格有疑问,可以单击“了解计费详情”来了解产品价格。如果您对价格有疑问,可以单击“了解计费详情”来了解产品价格。企业项目该参数针对企业用户使用。…

linux安装python27_linux下安装python27 nginx 和uwsgi

注意:python27 默认没有安装 pip 和setuptools所以要提前安装。(务必先提前安装python27 哈 )wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.pypython ez_setup.py--insecurewget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486…

太太丘舍去_过中不至,太丘舍去,去后乃至的意思

展开全部过了正午朋友还没有到,陈太丘不再等候他而离开了,陈太丘离开后朋友才到。原文出自e69da5e6ba903231313335323631343130323136353331333433643131《陈太丘与友期行》南北朝刘义庆陈太丘与友期行,期日中。过中不至,太丘舍去…

5怎么选国外节点_外卖包装怎么选?这5个技巧要掌握

(↑点上图“知识卡片”,按右上角箭头,可分享至朋友圈保存↑)在这个重颜值的时代,消费者对于外卖包装的诉求在逐渐提高,在餐品质量差异不大的前提下,那些包装好的商品,更具市场竞争力,能加深消费…

基于jmx监控kafka_0542-6.1.0-非安全环境下Kafka管理工具Kafka Eagle安装使用

1.文档编写目的Fayson在前面的文章介绍了《0374-如何在CDH集群中部署Kafka Manager》,本篇文章Fayson介绍另外一款的监控工具Kafka-eagle,它可以同时监控多个集群,监控集群中Topic的被消费情况(包含Lag产生、Offset的改变及Partition分布)&am…

android 怎么调用js项目_APP逆向神器之Frida【Android初级篇】

说到逆向APP,很多人首先想到的都是反编译,但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值,极大地增加了逆向时的复杂度,有没有什么办法可以方便地知道被传入的参数和返回值呢?答案是有的…

jdbc和mysql做游戏排行榜_MySQL数据库与JDBC编程

欢迎关注公众号:xfxuezhangMySQL数据库与JDBC编程JDBC (Java Database Connectivity)DDL(Data Definition Language,数据定义语言)语句创建表修改表结构增加列定义修改列定义删除列删除数据表清空表MySQL重命名数据表MySQL修改列名数据库约束索引(一个数…