政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(二){Image tutorial}·{Python语言}

news2024/11/25 5:04:06

咱们接着上一篇,这次咱们讲使用Matplotlib绘制图像的简短尝试。

我的这个系列的上一篇文章在这里:

政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(一){Pyplot tutorial}icon-default.png?t=N7T8https://blog.csdn.net/snowdenkeke/article/details/136096870

简介

Matplotlib是一个用于绘制图表的Python库,它包含了丰富的图形绘制功能,其中,Matplotlib的Image功能是用于处理和显示图像数据的模块。

使用Matplotlib的Image功能,可以读取、展示和处理图像数据,它支持常见的图像格式,如JPEG、PNG等,并提供了各种方法和函数来操作图像数据。

要读取图像数据,可以使用imread()函数,它可以将图像文件加载到一个NumPy数组中。加载后的图像数据可以通过imshow()函数来显示。

Matplotlib的Image功能还提供了一系列的图像处理函数,如调整图像大小、裁剪、旋转、滤波等。这些函数可以在图像数据上进行操作,并返回处理后的图像数据。

除了基本的图像处理功能外,Matplotlib的Image功能还提供了一些高级的特性,如图像的融合、图像的绘制和叠加、图像的透明度调整等,这些功能可以应用于各种图像处理和视觉化任务中。

总之,Matplotlib的Image功能提供了丰富而强大的图像处理和显示功能,使得用户可以方便地处理和展示图像数据,无论是简单的图像操作还是复杂的图像处理任务,Matplotlib的Image功能都能提供灵活和高效的解决方案。

启动命令

让咱们启动IPython。

它是标准Python提示的一个非常好的增强功能,并且与Matplotlib非常紧密地关联在一起。可以直接在shell上启动IPython,也可以在Jupyter Notebook中启动(其中IPython作为一个运行内核)。

启动IPython后,我们现在需要连接到一个图形用户界面事件循环。

这告诉IPython在哪里(以及如何)显示图形。要连接到GUI循环,请在IPython提示符处执行%matplotlib魔术命令。关于此命令的详细信息,请参阅IPython文档中有关GUI事件循环的部分。

如果您正在使用Jupyter Notebook,相同的命令也可以使用,但人们通常将特定的参数用于%matplotlib魔术命令:

%matplotlib inline

咱们依旧在Conda虚拟环境中启动Jupyter Notebook:

这将打开内联绘图,绘图图形将显示在你的笔记本中。这对交互性有重要的影响。

对于内联绘图,在输出绘图的单元格下面的单元格中的命令不会影响绘图。

例如,无法从创建绘图的单元格下面的单元格中更改色图。

然而,对于其他后端,如打开一个单独窗口的Qt,下面的单元格将更改绘图 - 它是内存中的一个活动对象。

本篇将使用Matplotlib的隐式绘图接口pyplot。

这个接口维护全局状态,非常适用于快速简便地尝试不同的绘图设置。另一种选择是显式接口,更适合于大型应用程序开发。

现在,让我们开始隐式方法的学习

from PIL import Image

import matplotlib.pyplot as plt
import numpy as np

将图像数据导入到NumPy数组中

Matplotlib依赖Pillow库来加载图像数据。

下面是我们要使用的图像:

这是一张24位RGB的PNG图像(每个颜色通道的位数为8位)。

根据获得数据的方式,您可能会遇到其他类型的图像,最常见的是包含透明度的RGBA图像,或者单通道灰度(亮度)图像。

我们使用Pillow来打开图像(使用PIL.Image.open),然后立即将PIL.Image.Image对象转换为8位(dtype=uint8)的numpy数组。

img = np.asarray(Image.open('./stinkbug.png'))
print(repr(img))

(小伙伴们可以将这张图像拷贝到工作目录中)

我的执行如下:

每个内部列表代表一个像素,在这里,对于一个 RGB 图像,有 3 个值。由于这是一张黑白图片,R、G 和 B 都是相似的。一个 RGBA 图像(其中 A 代表 alpha 或透明度)每个内部列表有 4 个值,而一个简单的亮度图像只有一个值(因此只是一个 2D 数组,而不是一个 3D 数组)。对于 RGB 和 RGBA 图像,Matplotlib 支持 float32 和 uint8 数据类型。对于灰度图像,Matplotlib 只支持 float32。如果你的数组数据不符合上述描述,你需要重新缩放它。

将numpy数组绘制为图像

您刚才已经将数据存储在一个numpy数组中(通过导入或生成)。

我们可以使用Matplotlib的imshow()函数来显示它,在这里,我们将获取绘图对象,这个对象可以方便地在提示符下操作绘图。

imgplot = plt.imshow(img)

我的执行如下:

        (您还可以绘制任何NumPy数组。

将伪彩色方案应用于图像绘图

伪彩色可以是增强对比度和更轻松地可视化数据的有用工具,当使用投影仪展示数据时,这尤其有用-它们的对比度通常很差。

伪彩色只与单通道、灰度、亮度图像相关。我们目前有一个RGB图像,由于R、G和B都相似(可在上方或数据中自行查看),我们可以使用数组切片来选择数据的一个通道(您可以在Numpy教程中了解更多信息)。

lum_img = img[:, :, 0]
plt.imshow(lum_img)

现在,对于一张亮度(2D,无色彩)图像,会应用默认的色彩映射表(也称为查找表,LUT)。默认的色彩映射表被称为viridis。还有很多其他选择。

plt.imshow(lum_img, cmap="hot")

我的执行如下:

请注意,您还可以使用set_cmap()方法来更改现有绘图对象的颜色映射:

imgplot = plt.imshow(lum_img)
imgplot.set_cmap('nipy_spectral')

注意:

请记住,在使用内联后端的Jupyter Notebook中,无法对已呈现的图进行更改。如果您在一个单元格中创建了imgplot,则不能在以后的单元格中调用set_cmap()并期望更早的绘图发生变化。确保您将这些命令一起输入一个单元格中。plt命令不会更改之前单元格中的绘图。

还有许多其他的颜色映射方案可供选择,请查看颜色映射的列表和图像。

颜色标度参考

在图表中添加一个颜色条是有助于了解颜色所代表的价值的。

imgplot = plt.imshow(lum_img)
plt.colorbar()

我的执行:

检查特定的数据范围

有时候,您可能希望增强图像的对比度,或者在牺牲不太变化或不重要的颜色细节的情况下,扩大特定区域的对比度。一个很好的工具来找到有趣的区域是直方图。为了创建我们图像数据的直方图,我们使用hist()函数。

plt.hist(lum_img.ravel(), bins=range(256), fc='k', ec='k')

通常,图像中“有趣”的部分通常在峰值附近,通过裁剪峰值上方和/或下方的区域,可以获得额外的对比度,在我们的直方图中,高端似乎没有太多有用的信息(图像中没有太多白色物体),让我们调整上限,以便我们有效地“放大”直方图的一部分。  

我们通过设置colormap限制clim来实现这一点。

可以通过在调用imshow时传递一个clim关键字参数来实现这一点:

plt.imshow(lum_img, clim=(0, 175))

这也可以通过调用返回的图像绘制对象的set_clim()方法来实现,但是在使用Jupyter Notebook时,请确保在与绘图命令相同的单元格中进行操作,否则它不会更改先前单元格中的绘图。

imgplot = plt.imshow(lum_img)
imgplot.set_clim(0, 175)

数组插值方案

插值计算了像素的颜色或值,根据不同的数学方案,计算出像素“应该”是什么。

一个常见的应用场景是调整图像的大小,像素的数量发生了变化,但你希望保留相同的信息。

由于像素是离散的,存在着缺失的空间,插值就是用来填充这个空间的方法,这就是为什么当你放大图像时,图像有时会出现像素化的效果。当原始图像和放大后的图像之间的差异越大时,效果就更加明显,让我们来缩小一下我们的图像,我们有效地丢弃了一些像素,只保留了一小部分,现在当我们绘制它时,这些数据被放大到屏幕上的尺寸,旧的像素不再存在,计算机必须绘制像素来填充那个空间。

我们将使用"pillow"库来加载图片并调整图片的大小。

img = Image.open('./stinkbug.png')
img.thumbnail((64, 64))  # resizes image in-place
imgplot = plt.imshow(img)

在这里,我们使用默认的插值方法(“nearest”),因为我们没有给imshow()函数传递任何插值参数。

让我们尝试一些其他的词。这是“双线性”的意思:

imgplot = plt.imshow(img, interpolation="bilinear")

和双三次插值:

imgplot = plt.imshow(img, interpolation="bicubic")

双三次插值经常用于放大照片 - 人们倾向于模糊而不是像素化。

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

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

相关文章

创建菜单与游戏页面

bootstrap地址 Bootstrap v5 中文文档 Bootstrap 是全球最受欢迎的 HTML、CSS 和 JS 前端工具库。 | Bootstrap 中文网 (bootcss.com) 创建导航栏组件 web--src--components--NavBar.vue <!-- html --> <template><nav class"navbar navbar-expand-lg n…

Linux ipvlan详解(l2、l3、l3s和bridge、private和vepa模式)

Linux ipvlan详解&#xff0c;测试l2、l3、l3s和bridge、private和vepa模式。 最近在看Docker的网络&#xff0c;看到关于ipvlan网络的介绍。查阅了相关资料&#xff0c;记录如下。 参考 1.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 2.IPVlan 详…

假如程序员也分等级……

本次考试有10道题&#xff0c;一题10分&#xff0c;做完后可查看段位等级。 1.请问复制粘贴用什么快捷键&#xff1f; A.CtrlV,CtrlC B.CtrlC,CtrlV 2.计算机里用的是&#xff08; &#xff09;进制&#xff1f; A.二 B.十 3.对于输出“Hello world”正确的一项是&#…

Oracle 几种行转列的方式 sum+decode sum+case when pivot

目录 原始数据&#xff1a; 方式一&#xff1a; 方式二&#xff1a; 方式三&#xff1a; unpivot的使用&#xff1a; 原始数据&#xff1a; 方式一&#xff1a; select t_name,sum(decode(t_item, item1, t_num, 0)) item1,sum(decode(t_item, item2, t_num, 0)) item2,s…

洗地机买什么品牌好?最好的洗地机品牌

对于双职工家庭来说&#xff0c;日常家务活是一个很大的难题。所以就要借助洗地机来提升生活质量&#xff0c;确实智能家电能够帮助日常家务减负。市面上的洗地机的品牌是真的很多&#xff0c;笔者今天带大家一起来看看什么洗地机品牌好用。 该如何挑选适合自己的家用洗地机 …

nginx2

mkdir /usr/local/develop cd /usr/local/develop 下载 wget http://nginx.org/download/nginx-1.17.4.tar.gz 解压文件 tar zxmf nginx-1.17.4.tar.gz 进入解压目录 cd nginx-1.17.4/ 安装编译工具及依赖库 都安装成功后再次执行会有下面提示 yum -y install gcc pcre-de…

C++入门学习(二十七)跳转语句—continue语句

当在循环中遇到continue语句时&#xff0c;它会跳过当前迭代剩余的代码块&#xff0c;并立即开始下一次迭代。这意味着continue语句用于跳过循环中特定的执行步骤&#xff0c;而不是完全终止循环。 直接看一下下面的代码更清晰&#xff1a; 与上一节的break语句可以做一下对比…

编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC

编译OpenSSL 3.0.1时报错&#xff0c;错误信息如下 解决方法&#xff1a; 安装perl-CPAN yum install -y perl-CPAN进入CPAN的shell模式&#xff0c;首次进入需要配置shell&#xff0c;按照提示操作即可&#xff08;本人perl小白&#xff0c;全部选择默认配置&#xff0c;高…

WSL下如何使用Ubuntu本地部署Vits2.3-Extra-v2:中文特化修复版(新手从0开始部署教程)

环境&#xff1a; 硬&#xff1a; 台式电脑 1.cpu:I5 11代以上 2.内存16G以上 3.硬盘固态500G以上 4.显卡N卡8G显存以上 20系2070以上 本案例英伟达4070 12G 5.网络可连github 软&#xff1a; Win10 专业版 19045以上 WSL2 -Ubuntu22.04 1.bert-Vits2.3 Extra-v2:…

Packet Tracer - Configure IOS Intrusion Prevention System (IPS) Using the CLI

Packet Tracer - 使用CLI配置IOS入侵防御系统&#xff08;IPS&#xff09; 地址表 目标 启用IOS入侵防御系统&#xff08;IPS&#xff09;。 配置日志记录功能。 修改IPS签名规则。 验证IPS配置。 背景/场景 您的任务是在R1上启用IPS&#xff0c;扫描进入192.168.1.0网络…

django报错:Cannot use ImageField because Pillow is not installed

1、问题概述 ERRORS: accounts.User.avatar: (fields.E210) Cannot use ImageField because Pillow is not installed. HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow". System check identified 1 …

98.网游逆向分析与插件开发-网络通信封包解析-定位明文发送数据的关键函数

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目需求与需求拆解 通过上一个内容有了对网络通信架构有一个简单认识了解&#xff0c;对于我们重要的点是 组织数据 到 加密数据之间的过程&#xff0c;这个过程的数据我们是可以看懂的&#xff0c;…

Duilib List 控件学习

这是自带的一个示例; 一开始运行的时候List中是空的,点击Search按钮以后就填充列表框; 先看一下列表框列头是在xml文件中形成的; <List name="domainlist" bkcolor="#FFFFFFFF" ... menu="true"> <ListHeader height="24…

【MySQL进阶之路】好友推荐系统索引设计实战

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

ADSelfService Plus发布离线MFA功能,强化远程工作安全性

ManageEngine ADSelfService Plus推出离线多因素身份验证&#xff0c;提升远程工作安全性确保通过先进的验证方法对企业数据进行授权访问&#xff0c;无论时间、地点或连接问题如何允许远程用户安全进行身份验证&#xff0c;即使未连接到认证服务器或互联网使用高度安全的基于T…

###C语言程序设计-----C语言学习(12)#进制间转换,十进制,二进制,八进制,十六进制

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 计算机处理的所有信息都以二进制形式表示&#xff0c;即数据的存储和计算都采…

协议-TCP协议-基础概念04-可能发生丢包的位置-linux配置项梳理(TCP连接的建立和断开、收发包过程)

可能发生丢包的位置-linux配置项梳理&#xff08;TCP连接的建立和断开、收发包过程&#xff09;-SYN Flood攻击和防御原理 参考来源&#xff1a; 极客时间-Linux性能优化实战 极客时间-Linux内核技术实战课 到底是哪里发生了丢包呢&#xff1f; Linux 的网络收发流程 从图中…

【java】12:封装

面向对象编程三大特征 1.基本介绍 面向对象编程有三大特征&#xff1a;封装、继承和多态。 2.封装介绍 封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&am…

3秒实现无痛基于Stable Diffusion WebUI安装ComfyUI!无需重复安装环境!无需重复下载模型!安装教程

标题略有夸张的表达了接下来这一套确实很简单&#xff0c;相较于直接下载或者通过秋叶包更新而言。大大节省磁盘空间&#xff0c;和下载时间。 这篇教程不需要你有&#xff1a; 代码基础。都是复制粘贴就完事。魔法。 这篇教程默认你已经有&#xff1a; 1. 本地能够正常使用…

python+flask+django农产品供销展销电子商务系统lkw43

供销社农产品展销系统的设计与实现&#xff0c;最主要的是满足使用者的使用需求&#xff0c;并且可以向使用者提供一些与系统配套的服务。本篇论文主要从实际出发&#xff0c;采用以对象为设计重点的设计方法&#xff0c;因此在进行系统总体的需求分时借助用例图可以更好的阐述…