matplotlib - 如何将数组保存为带有叠加文本的图像?

时间:2016-06-29 17:45:25

标签: python image matplotlib

我有一个需要保存为png的2D数组。我还需要为图像添加文本标签。到目前为止,我已经尝试了两种方法,其中没有一种是最优的:

  • 我使用matplotlib.image模块将数组直接保存为图像:

    matplotlib.image.imsave(FILENAME, ARRAY, cmap=plt.cm.binary)  
    

    但是我无法使用该命令添加文本。保存原始图像后,我可以使用PIL进行读取和编辑,但是大数据集上的I / O成本是不可接受的。

  • 我使用pyplot界面将数组转换为数字,然后添加图例。但是,当我将其保存为文件时,会有不必要的空白。我试过关闭轴,将填充设置为0等,但总有一些空白边距我无法摆脱:

    import matplotlib.pyplot as plt
    plt.imshow(ARRAY, cmap=plt.cm.binary)
    plt.axis('off') 
    plt.savefig(FILENAME, dpi=100, pad_inches=0.0, bbox_inches='tight')
    

有没有办法从2D数组生成图像,覆盖文本,并快速保存为.png而没有空格?最好是使用matplotlib / PIL的解决方案,但如果有更好的解决方案,我可以调查一下。

1 个答案:

答案 0 :(得分:0)

我能够从一开始就使用面向对象的方法来解决我的问题:

import matplotlib.pyplot as plt
fig = plt.figure(dpi=100, tight_layout=True, frameon=False, figsize=(resolution/100.,resolution/100.)) # dpi & figsize of my choosing
fig.figimage(ARRAY, cmap=plt.cm.binary)
fig.text(X,Y,TEXT, size='medium', backgroundcolor='white', alpha=0.5)
plt.savefig(FILENAME)
plt.close(fig)

可以找到figure课程的其他文档here

注意:为了确定数字大小,我发现这种关系很有用:
尺寸(英寸)=分辨率(DPI