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群下载。

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

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

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

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

ndarray保存图像的方式解析

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

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

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

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

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

使用:im_ar[12][27]检索,返回一个array([247, 176, 148]

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

[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

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

  1. 天翼云应知应会认证重点知识手册

    天翼云应知应会认证核心知识点 1 天翼云认证应知应会重点知识点串讲 第一部分:基础知识能力提升板块 一.基础知识(选修) 1.服务器基础(选修) 必备掌握知识点: (1)1967 年和1977 年分别 ...

  2. 应知应会的Word图片技巧(转)

    应知应会的Word图片技巧(转) 在使用Word编辑文档时,为了使文档图文并茂,难免要与Word中的图片打交道,以下是笔者总结的十则Word图片技巧,在此与您分享.     一.在Word文档中抠出图 ...

  3. HTTP应知应会知识点复习手册(下)

    前言 本文快速回顾了常考的的知识点,用作面试复习,事半功倍. 面试知识点复习手册 全复习手册文章导航 Csdn全复习手册文章导航: https://blog.csdn.net/qqxx6661/art ...

  4. Linux初级工程师应知应会

    Linux初级工程师应知应会 权限管理 1. Linux用户及权限 1. Linux用户和组 Linux中的用户 root用户 系统用户 用户组 2. Linux权限构成 Linux的权限组成 Lin ...

  5. 职称计算机初级应知应会书,2017专业技术职称申报应知应会.ppt

    2017专业技术职称申报应知应会 关于转系列评审 申报转评某一系列专业技术职称,申报条件参照该技术职称条件要求执行. 此外: 之前的计算机.外语资历有效. 若申请转评的职称条件中有计算机.外语要求而之 ...

  6. k3 物料收发明细表sql_物料管理:班组长物料使用应知应会4件事

    阅读导航→ 01 物料使用前检查 02 物料台面摆放 03 物料消耗控制 04 生产废料处理 一.物料使用前检查 为判定物料投入生产前的质量,预防不合格.不正确的物料投入使用,班组长需督促.指导班组员 ...

  7. 嵌入式从业者应知应会知识点 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是嵌入式从业者应知应会知识点. 嵌入式开发需要掌握的知识点非常多,不同的技术方向有不同的知识侧重点,本系列试图整理总结嵌入式开发(尤其是 ...

  8. 电信笔试C语言,-中国电信笔试-中国电信C网应知应会题库基础分册(V1.0).doc

    2 中国电信C网应知应会题库 基础分册(V1.0) 中国电信人力资源部 二零零八年九月 编制说明 随着中国电信运营商重组方案尘埃落定,中国电信正在加紧C网的接管.运营工作.这就迫切要求中国电信的服务管 ...

  9. 浅谈政务行业售前架构(解决方案)岗位应知应会

    如果这是一个命题<浅谈政务行业售前架构岗位应知应会>,那么我下面会从工作实际情况进行阐述: 一.但凡谈到政务行业,一定少不了公检法司.教育.文旅.发改工信科技委员会等等政务机构,今天只谈谈 ...

最新文章

  1. Android隐藏状态栏和标题栏,相当于全屏效果
  2. 影像组学视频学习笔记(35)-基于2D超声影像的影像组学特征提取、Li‘s have a solution and plan.
  3. Caused by: java.net.UnknownHostException: localhost.localdomain: localhost.localdomain的问题解决
  4. opencv 霍夫曼变换 直线提取
  5. python 批量修改密码
  6. ChaiNext:大盘横盘,主流币未有突出表现
  7. SpringBoot连接远程云服务器的Redis并且让Redis后台运行
  8. Quartus II调用modelsim ALTEA 的软件使用及问题
  9. 第一篇论文:改进TCP及UDP的性能分析及比较
  10. RemObjects
  11. php 发送curl跨域请求,php跨域传输(curl)
  12. Python 自动化办公 —— PyPDF2 库的基本使用
  13. Linux修改文件保存时报错E45: 已设定选项 ‘readonly‘ (请加 ! 强制执行)
  14. excel学习-选择性粘贴(转置+跳过空白单元格+运算)
  15. 邮箱如何发邮件?邮箱怎么发邮件,掌握这几点,轻松搞定
  16. 移动商务进入战国时代 08年市场规模达306.5亿
  17. 前端面试问题(白话回答,便于记忆)
  18. 快速打开cmd的方法(win7) window小合集
  19. arcgis 投影坐标系的区分
  20. makefile中一些符号的含义

热门文章

  1. 【转】关键字过滤算法
  2. python实现链表的删除_Python中 为我们提供了一些独特的解决方案的方法特性
  3. 计算机二级考试python_全国计算机等级考试考试大纲(2018年版)
  4. cpu散热器怎么拆_电脑CPU处理器与整机温度高 教你简单解决
  5. [转载] java-继承和多态
  6. 关于细分到字段的权限系统_操作系统中的细分
  7. 美颜相机window 开源_X-Window系统| 免费和开源软件
  8. 网际控制报文协议icmp_网络中的ICMP(Internet控制消息协议)
  9. c#如何实现叫号操作_微信预约排队叫号系统操作指南
  10. 狂神说es笔记_人教版七上英语Unit5电子课本音频+课堂笔记+课后同步习题