【问题标题】:matplotlib - How to save an array as image with overlayed text?matplotlib - 如何将数组保存为带有覆盖文本的图像?
【发布时间】:2016-11-01 13:56:23
【问题描述】:

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

  • 我使用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')
    

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

【问题讨论】:

标签: python image matplotlib


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2013-03-26
    相关资源
    最近更新 更多