当前位置: 首页 > news >正文

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

咱们接着上一篇,这次咱们讲使用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 Imageimport 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")

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

相关文章:

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

咱们接着上一篇,这次咱们讲使用Matplotlib绘制图像的简短尝试。 我的这个系列的上一篇文章在这里: 政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(一){Pyplot tutorial}https://blog.csdn.net/snowdenkeke/ar…...

gem5学习(20):替换策略——Replacement Policies

目录 一、Random 二、Least Recently Used (LRU) 三、Tree Pseudo Least Recently Used (TreePLRU) 四、Bimodal Insertion Policy (BIP) 五、LRU Insertion Policy (LIP) 六、Most Recently Used (MRU) 七、Least Frequently Used (LFU) 八、First-In, First-Out (FIF…...

嵌入式Qt Qt中的字符串类

一.Qt中的字符串类 QString vs string&#xff1a; QString在Qt库中几乎是无所不在的 所有的Qt图形用户组件都依赖于QString 实验1 &#xff1a;QString 初体验 #include <QDebug> void Sample_1() {QString s "add";s.append(" "); // &q…...

函数高级(C++)

师从黑马程序员 函数默认参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的 语法&#xff1a;返回值类型 函数名 &#xff08;参数默认值 {}&#xff09; #include <iostream> using namespace std;//函数默认参数//如果我们自己传入数据&#xff0c;…...

jmeter-10调试取样器

文章目录 作用设置使用举例 作用 jmeter中添加调试取样器&#xff0c;可以用于检测测试过程的值如&#xff1a;变量、参数、系统设置等 设置 选择线程组右键 >>> 添加 >>> 取样器 >>> 调试取样器&#xff08;Debug Sampler&#xff09; jmeter …...

C#,二进制数的按位旋转(Bits Rotate)算法与源代码

1 二进制数的按位旋转 二进制数的按位旋转&#xff08;翻转&#xff09;是编程中常见的按位运算方法。 二进制数的按位旋转分为左转、右转。 左转意味着数据变大&#xff0c;右转意味着数据变小&#xff08;有损&#xff09;。 2 源程序 using System; using System.Text; us…...

解决ubuntu登录密码问题

解决ubuntu登录密码问题 不要随便删除密码&#xff0c;不要随便改密码&#xff0c;很容导致密码过期&#xff0c;或者密码无效。参考了很多人的做法&#xff0c;都没有得到解决。下面的过程&#xff0c;够详细了&#xff0c;我就是这么搞好的。 1、重启虚拟机&#xff0c;不停…...

Ubuntu忘记登录密码重置步骤

Ubuntu忘记登录密码重置步骤 1.开机界面长按shitf键&#xff0c;进入grub&#xff0c;并选择Advanced options for ubuntu&#xff0c;按下回车 2.选择一个较新版本的recovery mode&#xff0c;按下回车 3.会跑一些数据&#xff0c;等待跑完后会出现下面的界面&#xff0c;选择…...

MySQL数据库基础(五):SQL语言讲解

文章目录 SQL语言讲解 一、SQL概述 二、SQL语句分类 1、DDL 2、DML 3、DQL 4、DCL 三、SQL基本语法 1、SQL语句可以单行或多行书写&#xff0c;以分号结尾 2、可使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写…...

python-使用ffmpeg批量修改文件的后缀名

import os import subprocessdef convert_ogg_to_mp3(directory):for filename in os.listdir(directory):if filename.endswith(".ogg"):# 获取文件的完整路径file_path os.path.join(directory, filename)# 创建一个新的文件名&#xff0c;只是将扩展名从.ogg更改…...

关于jupyter的一些小笔记

关于jupyter的一些小笔记 1.Jupyter Notebook&#xff1a;单/多行注释&#xff0c;组合键&#xff1a;选中代码&#xff0c;按Ctrl /。 2.安装PHATE包 使用pip直接进行安装 pip install --user phate成功解决AttributeError: module ‘numpy’ has no attribute ‘float’. 报…...

macOS 安装 conda

macOS 安装 conda 安装 conda参考 Conda是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装和管理软件包和其依赖项。 安装 conda mkdir miniconda3 cd miniconda3 bash Miniconda3-latest-MacOSX-x86_64.sh$ conda list参考 macOS 安装 conda开始使用conda...

C++并发编程 -3.同步并发操作

本文介绍如何使用条件变量控制并发的同步操作、C 并发三剑客&#xff0c;函数式编程 一.条件变量 1.概念 C条件变量&#xff08;condition variable&#xff09;是一种多线程编程中常用的同步机制&#xff0c;用于线程间的通信和协调。它允许一个或多个线程等待某个条件的发生…...

【打工日常】使用docker部署可视化工具docker-ui

一、docker-ui介绍 docker-ui是一个易用且轻量化的Docker管理工具&#xff0c;透过Web界面的操作&#xff0c;方便快捷操作docker容器化工作。 docker-ui拥有易操作化化界面&#xff0c;不须记忆docker指令&#xff0c;仅需下载镜像即可立刻加入完成部署。基于docker的特性&…...

LGAMEFI基于BPL公链开发的第一生态:开启RWA游戏娱乐与DeFi融合的新纪元

在去中心化金融&#xff08;DeFi&#xff09;与游戏娱乐的结合趋势中&#xff0c;BPL公链上的LGAMEFI项目代表了前沿的技术革新和市场领导。这种将web2上成熟页游进行RWA链改&#xff0c;不仅仅是将游戏热门领域融合&#xff0c;更是在寻找一种全新的参与者经验&#xff0c;将玩…...

AI专题:5G-A扬帆风正劲,踏AI增长新浪潮

今天分享的是AI系列深度研究报告&#xff1a;《AI专题&#xff1a;5G-A扬帆风正劲&#xff0c;踏AI增长新浪潮》。 &#xff08;报告出品方&#xff1a;开源证券&#xff09; 报告共计&#xff1a;22页 足立连接&#xff0c;拓展算力&#xff0c;双曲线稳步发力 中兴通讯拥…...

C++Linux网络编程:poll模型和简单使用

文章目录 poll模型pollfd结构体nfds_t的定义 一个简单的poll服务器总结 poll模型 poll模型和select模型类似&#xff0c;都是在指定时间内轮询一定数量的文件描述符&#xff0c;以测试其中是否有就绪者&#xff0c;需要使用头文件poll.h&#xff1a; #include <poll.h>…...

Excel模板2:进度条甘特图

Excel模板2&#xff1a;进度条甘特图 ‍ 今天复刻B站up【名字叫麦兜的狗狗】的甘特图&#xff1a;还在买Excel模板吗&#xff1f;自己做漂亮简洁的甘特图吧&#xff01;_哔哩哔哩_bilibili 阿里网盘永久分享&#xff1a;https://www.alipan.com/s/cXhq1PNJfdm 当前效果&…...

数据结构:4_二叉树

二叉树 一.树概念及结构 1. 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个**特殊的…...

设计模式之:状态模式(State Pattern)

状态模式&#xff08;State Pattern&#xff09; 状态模式是一种行为设计模式&#xff0c;允许一个对象在其内部状态改变时改变它的行为。这种模式通过把状态的变化逻辑分布到State的子类之间&#xff0c;减少了相互间的依赖&#xff0c;使得状态的切换更加清晰。 状态模式的…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...