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

2023-12-23 23:48

本文主要是介绍06 - 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

在这里插入图片描述
输入如下代码:

import numpy as np
from 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],在配色软件上检索这个值:
在这里插入图片描述
numpy就是这样用ndarray保存image的。是不是豁然开朗了!

读取ndarray,显示出图像

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

输入如下代码:

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

from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure,SubplotParams
import 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 Image
im = Image.frombytes("RGBA", (width, height), s)im.show()

运行它,就会看到在mpl的figure中插入了上面那幅图像:
在这里插入图片描述

图像ndarray数据的广泛用途

ndarray(多维数组)具有强大的运算、变换能力,显然我们将图像存储为ndarray数据后,就可以做很多事:

  1. 传输图像;
  2. 加密图像;
  3. 变换图像,如旋转、缩放、裁剪、滤镜等,mpl中许多地方就是这样用的;

随着写作的进展,越来越多需要自己动手实践,输入、运行代码,体会产生的结果。

由于Python的开源性,第三方库的复杂性,经常会遇到各种问题(代码运行出错、结果不一样等),为了避免在这方面浪费大家的时间,下一篇将专门交流一下Python, matplotlib运行平台的安装配置问题。

(This end.)

这篇关于06 - matplotlib中应知应会numpy存储、交换图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/529892

相关文章

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs