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

相关文章

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

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主