简介
在本实验中,你将学习如何在 Matplotlib 中创建一个 BboxImage。BboxImage 可用于根据边界框定位图像。我们将展示如何创建带有文本的 BboxImage 以及如何为每个颜色映射创建 BboxImage。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入必要的库
我们首先导入本教程所需的必要库。我们将需要matplotlib.pyplot、numpy、BboxImage、Bbox和TransformedBbox。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.image import BboxImage
from matplotlib.transforms import Bbox, TransformedBbox
创建带文本的 BboxImage
我们首先创建一个带文本的 BboxImage。我们使用text()方法创建一个text对象,并将其添加到ax1对象中。然后,我们使用add_artist()方法创建一个BboxImage对象。我们将text对象的get_window_extent方法传递给BboxImage构造函数,以获取文本的边界框。我们还将形状为 (1, 256) 的一维数组传递给BboxImage构造函数的data参数,以创建一个图像。
fig, (ax1, ax2) = plt.subplots(ncols=2)
txt = ax1.text(0.5, 0.5, "test", size=30, ha="center", color="w")
ax1.add_artist(
BboxImage(txt.get_window_extent, data=np.arange(256).reshape((1, -1))))
为每个颜色映射创建一个 BboxImage
接下来,我们为每个颜色映射创建一个 BboxImage。我们首先使用plt.colormaps方法创建一个所有颜色映射的列表。然后,我们创建一个for循环,遍历颜色映射列表。对于每个颜色映射,我们使用divmod()方法计算ix和iy位置。然后,我们使用Bbox.from_bounds()方法创建一个Bbox对象。我们将ix、iy、dx和dy值传递给Bbox.from_bounds()方法以创建边界框。然后,我们使用Bbox对象和ax2.transAxes对象创建一个TransformedBbox对象。最后,我们使用add_artist()方法创建一个BboxImage对象。我们将TransformedBbox对象传递给BboxImage构造函数,以创建一个带有颜色映射的图像。
cmap_names = sorted(m for m in plt.colormaps if not m.endswith("_r"))
ncol = 2
nrow = len(cmap_names) // ncol + 1
xpad_fraction = 0.3
dx = 1 / (ncol + xpad_fraction * (ncol - 1))
ypad_fraction = 0.3
dy = 1 / (nrow + ypad_fraction * (nrow - 1))
for i, cmap_name in enumerate(cmap_names):
ix, iy = divmod(i, nrow)
bbox0 = Bbox.from_bounds(ix*dx*(1+xpad_fraction),
1 - iy*dy*(1+ypad_fraction) - dy,
dx, dy)
bbox = TransformedBbox(bbox0, ax2.transAxes)
ax2.add_artist(
BboxImage(bbox, cmap=cmap_name, data=np.arange(256).reshape((1, -1))))
显示绘图
最后,我们使用show()方法显示绘图。
plt.show()
总结
在本实验中,你学习了如何在 Matplotlib 中创建 BboxImage。我们创建了一个带文本的 BboxImage 以及为每个颜色映射创建了一个 BboxImage。你可以运用这些知识来创建具有不同边界框和颜色映射的图像。