给定一组图像以及与每个图像关联的 (x,y) 坐标,我想创建一组图像的“复合”图,每个图像位于其 (x,y) 坐标处。
例如,给定以下集合,其中列表中的每个项目都是 (x, y, image) 元组:
images = [(0,0,'image1.jpg'), (0,1,'image2.jpg'), (1,0,'image3.jpg)]
Run Code Online (Sandbox Code Playgroud)
我想创建一个图,其中对应的图像image1.jpg绘制在坐标 (0,0) 处的 xy 图上,对应的图像image2.jpg绘制在 (0, 1) 处,等等...
我一直在使用 PIL 通过非常手动的方法来解决这个问题,其中我会进行大量的手动计算、缩放,甚至手绘轴等,以将合成图像“粘贴”在一起。它可以工作,但我的代码很混乱,生成的图像不太漂亮,而且 PIL 库似乎存在一些可移植性问题。
有没有办法用 Matplotlib 来做到这一点?我尝试搜索他们的示例,但没有一个是我想要的,而且 Matplotlib 可以做很多事情,这让我头晕目眩。
如果有人有任何可能让我开始的指示,我将不胜感激。
作为参考,我尝试以 Python 2.7 为目标,尽管我足够聪明,可以翻译任何 3.x 代码。
自我编辑:也许这就是我正在寻找的:
将自定义图像放置在绘图窗口中 - 作为自定义数据标记或注释这些标记
编辑:请参阅已接受的答案。为了后代的利益,这里有一个基本的工作示例。我还在图像周围添加了黑色边框,这给人一种很好的感觉:
import matplotlib.pyplot as plt
from matplotlib._png import read_png
from matplotlib.pylab import Rectangle, gca
def main():
ax = plt.subplot(111)
ax.set_autoscaley_on(False)
ax.set_autoscalex_on(False)
ax.set_ylim([0,10])
ax.set_xlim([0,10])
imageData = read_png('image1.png')
plt.imshow(imageData, extent=[0,2,0,1])
gca().add_patch(Rectangle((0,0),2, 1, facecolor=(0,0,0,0)))
imageData …Run Code Online (Sandbox Code Playgroud)