matplotlib Python -在x-y坐标上绘制多个图像

mi7gmzs6  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(148)

给定一组图像,以及与每个图像相关联的(x,y)坐标,我想创建一个图像集的“合成”图,每个图像都在其(x,y)坐标处。
例如,给定以下集合,其中列表中的每个项目都是一个(x,y,image)元组:

images = [(0,0,'image1.jpg'), (0,1,'image2.jpg'), (1,0,'image3.jpg)]

字符串
我想创建一个图,其中对应于image1.jpg的图像绘制在坐标为(0,0)的x-y图上,对应于image2.jpg的图像绘制在(0,1)处,等等。
我一直在使用PIL手动处理这个问题,在那里我会做很多手动计算,缩放,甚至手绘轴等来“粘贴”合成图像。它工作,但我的代码是一团乱,结果图像不是太漂亮,而且似乎PIL库有一些可移植性问题。
有没有一种方法可以用Matplotlib做到这一点?我试着搜索他们的例子,但没有一个是我想要的,你可以用Matplotlib做很多事情,这让我头晕目眩。
如果任何人有任何提示,可能会让我开始,这将是高度赞赏。
作为参考,我试图以Python 2.7为目标,尽管我足够聪明,可以翻译任何3.x代码。
自我编辑:也许这就是我要找的:
Placing Custom Images in a Plot Window--as custom data markers or to annotate those markers
编辑:看到接受的答案.为了子孙后代,这里有一个基本的工作示例.我还添加了黑色边框周围的图像,这给它一个很好的触摸:

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 = read_png('image2.png')
    plt.imshow(imageData, extent=[2,4,1,2])
    gca().add_patch(Rectangle((2,1),2, 1, facecolor=(0,0,0,0)))

    imageData = read_png('image4.png')
    plt.imshow(imageData, extent=[4,6,2,3])
    gca().add_patch(Rectangle((4,2),2, 1, facecolor=(0,0,0,0)))

    plt.draw()
    plt.savefig('out.png', dpi=300)

pu3pd22g

pu3pd22g1#

要控制图像在数据空间中的显示位置,请使用imshowextent kwarg设置[left, right, bottom, top]边缘的位置。类似于:

list_of_corners = [(left0, right0, bottom0, top0), ...]
list_of_images = [im0, im1, ...]
fig, ax = plt.subplots(1, 1)

for extent, img in zip(list_of_corners, list_of_images):
    ax.imshow(img, extent=extent, ...)

字符串
应该可以

相关问题