Python数据可视化:使用matplotlib处理图像

Python中,matplotlib是一个被广泛使用的数据可视化库。本文将展示如何利用这个库来显示、修改和保存图像。将特别关注'matplotlib'库中的'image'模块,因为它简化了图像处理的工作。可以对图像进行多种操作,比如改变颜色、调整大小、裁剪图像等,并且可以将修改后的图像保存为一个新的图像文件。

本文将涵盖以下主题:

  • 导入库
  • 将图像数据导入到Numpy数组中
  • 显示图像
  • 选择图像的一部分
  • 添加颜色标尺
  • 移除坐标轴
  • 将彩色图像转换为灰度图像
  • 保存图像
  • 绘制图像数据的直方图

导入matplotlib

将从导入所需的库开始。

import matplotlib.pyplot as plt import matplotlib.image as mpimg

将使用matplotlib库的'image'子模块,它支持加载、缩放和显示图像等基本操作。为了方便,将它别名为'mpimg'。还将使用pyplot子模块,因为它支持不同类型的绘图。

要启用内联绘图,请使用以下代码。

%matplotlib inline

这个魔术命令会在编写绘图命令的单元格下方显示图表。

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

在显示图像之前,首先需要读取图像。图像由像素组成,每个像素是一个颜色点。在彩色图像中,每个像素由三种颜色组成,即红色、绿色和蓝色。当这三种颜色结合时,可以得到任何想要的颜色。

当图像存储在计算机中时,它是以数字数组的形式保存的。因此,每个像素可以取0到255之间的任何值,其中0代表最暗,255代表最亮。

对于灰度(黑白)图像,像素取0到1范围内的单个值。在灰度图像中,0代表黑色,1代表白色。范围内的其他值代表不同深浅的灰色。

将尝试绘制以下图像。这是一个32位的PNG图像,具有RGBA格式(每个通道8位,即每个像素32位)。它是一个4通道格式,其中R代表红色,G代表绿色,B代表蓝色,A代表alpha通道,描述颜色的不透明度。不透明度的范围是0.0到1.0,其中0代表完全透明,1代表完全不透明。

可以从以下链接下载此图像:

使用'imread'方法,将从给定的图像文件中读取图像到数组中。

img = mpimg.imread('Taj.png')

此函数返回一个多维NumPy数组。返回的NumPy数组的形状取决于图像的类型,即图像是灰度、RGB还是RGBA(带有alpha通道的RGB)。

print(img.shape)

每个像素由一个内部列表表示。由于有一个RGBA图像,因此每个内部列表中有4个值。第一个值代表红色通道的值,第二个值代表绿色通道的值,第三个值代表蓝色通道的值,第四个值代表alpha通道的不透明度。

列表中的数据类型是float32,因为matplotlib将每个通道的8位数据重新缩放到0.0和1.0之间的浮点数据。对于RGB和RGBA图像,matplotlib支持float32和uint8数据类型。对于灰度图像,matplotlib只支持float32。

使用Matplotlib显示图像

由于已经将图像数据加载到NumPy数组中,可以使用'imshow()'函数来渲染它。将使用pyplot对象,因为它使得操作图表变得容易。可以绘制任何NumPy数组。数组可能包含RGB数据、RGBA数据或2D标量数据(对于灰度图像)。

imgplot = plt.imshow(img)

选择图像的一部分

坐标轴有助于选择图像的一部分。可以使用它们作为切片图像的指南。对于给定的图像,如果想只显示泰姬陵而不显示图像的其他部分,那么可以利用坐标轴上显示的刻度和标签来决定要切片的图像部分。

selected_part = img[290:680 , 10:630 , :] plt.imshow(selected_part)

可以看到图像已经被完美地切片,并且只显示了泰姬陵。

使用Matplotlib添加颜色标尺

如果想要知道特定颜色代表的值,可以使用以下代码将颜色条添加到图像中:

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

可以看到颜色条被添加到图像的右侧,并且它显示了给定图像所有颜色的0到1范围内的值。

使用Matplotlib移除坐标轴

如果不希望在图像中显示编号的坐标轴,可以使用'axis'方法并将其参数值设置为'off'来去除坐标轴。

plt.axis("off") plt.imshow(img)

执行代码后,可以看到上述图像中的坐标轴已经消失。

将彩色图像转换为灰度图像

可以使用切片将RGB彩色图像的3D数组转换为灰度图像的2D数组,从而将彩色图像转换为灰度图像。

grayscale_img = img[:, :, 0] plt.imshow(grayscale_img, cmap='gray')

将在以下代码中仅选择三个维度中的一个,并使用'gray'作为colormap参数,以使其成为灰度图像。

保存图像

可以应用不同的伪彩色方案来增强图像数据的对比度。如果没有提供colormap值,将使用默认值'viridis'。让看看它如何影响图像。

plt.imshow(grayscale_img)

有许多colormap值可供选择并应用到图像中。有关colormap值的更多信息,可以访问:

让看看在应用'hot'的cmap值后图像如何变化。还将保存更改后的图像到文件中。如果没有提供文件的路径,它将被保存在当前工作目录中。

plt.imshow(grayscale_img, cmap='hot') plt.savefig("New_Image.png")

执行上述代码后,一个名为‘New_Image.png’的新图像文件被创建并存储在当前工作目录中。

使用Matplotlib绘制图像数据的直方图

plt.hist(img.ravel())
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485