HOWTO · Matplotlib
如何使用 Matplotlib Python 显示图像
了解如何使用 Matplotlib 的 imshow() 加载和显示本地图像、显示 PIL 图像、自定义其外观并保存图形。
本页内容
使用 matplotlib.pyplot.imread() 加载图像,使用 imshow() 将其像素放入 Matplotlib 坐标轴中,并使用 show() 在脚本中显示图形。传递给 imread() 的路径必须标识 Python 进程可用的图像。在笔记本中,最终图形通常会自动显示;在普通脚本中,请调用 plt.show()。
使用 Matplotlib 加载并显示图像
这个自包含示例创建一个小的示例图像,用 imread() 读取它并显示它。对于您的文件,请将示例图像的设置和 image_path 赋值替换为 Python 进程可访问的图像路径。将图像放在脚本旁边并使用其文件名,或提供绝对路径;相对路径从进程的当前工作目录解析。
from pathlib import Path
from tempfile import TemporaryDirectory
import matplotlib.pyplot as plt
import numpy as np
with TemporaryDirectory() as directory:
image_path = Path(directory) / "sample.png"
pixels = np.zeros((3, 3, 3), dtype=float)
pixels[:, :, 0] = 1.0
plt.imsave(image_path, pixels)
image = plt.imread(image_path)
plt.imshow(image)
plt.axis("off")
plt.show()
print("Image loaded and displayed.")
Image loaded and displayed.
imread() 将文件加载到数组中,imshow() 是 matplotlib.pyplot 中的一个函数,它在当前坐标轴中显示该图像数据。axis("off") 隐藏坐标轴及其刻度。生成的示例只是这个可运行示例的一个 fixture;使用您自己的图像时,请将该文件保持在所选路径上可用,并直接读取它。
使用 Matplotlib 显示 PIL 图像
如果图像已经由 PIL 图像对象表示,请将该对象传递给 imshow(),而不是用 plt.imread() 读取它。当程序的另一部分已经用 Pillow 打开或处理了图像时,这很有用。Image.show() 是单独的 PIL 显示途径;使用 plt.show() 显示 Matplotlib 图形。两个显示调用使用不同的渲染路径,因此当您需要坐标轴、图形尺寸设置或图形导出时,请使用 Matplotlib 途径。
from pathlib import Path
from tempfile import TemporaryDirectory
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
with TemporaryDirectory() as directory:
image_path = Path(directory) / "sample.png"
plt.imsave(image_path, np.full((3, 3, 3), 0.4))
with Image.open(image_path) as image:
plt.imshow(image)
plt.axis("off")
plt.show()
将临时示例路径替换为您自己的图像路径,以打开本地文件。此途径需要提供 PIL.Image 的 Pillow。
自定义图像显示
要以灰度方式查看 RGB 数据,请对其三个颜色通道求平均值并选择灰度颜色映射。下面的 mean(axis=2) 操作假设数组的第三个轴包含红色、绿色和蓝色通道;它并不适用于每种图像形状或颜色模型。插值改变的是 Matplotlib 在屏幕上渲染像素的方式,而不是源图像的细节。
import matplotlib.pyplot as plt
import numpy as np
image = np.array(
[
[[1.0, 0.2, 0.1], [0.2, 0.8, 0.3]],
[[0.1, 0.3, 1.0], [0.8, 0.8, 0.8]],
]
)
plt.imshow(image.mean(axis=2), cmap="gray", interpolation="bicubic")
plt.axis("off")
plt.show()
cmap="gray" 将平均值映射为灰色色调。当另一种受支持的颜色映射或插值设置更适合图像及其观看方式时,请选择它。要保留彩色图像,请将原始数组而不是平均后的数组传递给 imshow()。显示选项影响渲染出的视图;它们不会重写已加载的像素数据。
保存显示的图形
使用 savefig() 将 Matplotlib 图形写入图像文件。它保存图形(包括其坐标轴和布局),而不是更改原始图像。请在调用 show() 之前保存,以便在各种显示后端下图形仍可用于保存操作。
import matplotlib.pyplot as plt
import numpy as np
image = np.full((3, 3, 3), 0.4)
plt.imshow(image)
plt.axis("off")
plt.savefig("displayed-image.png", bbox_inches="tight", pad_inches=0)
plt.show()
路径 displayed-image.png 相对于当前工作目录写入。选择不同的文件名或路径来控制图形保存的位置。对于紧凑裁剪,bbox_inches="tight" 会裁掉周围的空白,pad_inches=0 会去掉额外的填充。如果导出的尺寸很重要,请在绘图前设置图形大小;保存的文件是当前 Matplotlib 图形的渲染结果。