我试图从Matplotlib图中获取一个numpy数组图像,目前我正在通过保存到一个文件中,然后阅读该文件,但我觉得必须有一个更好的方法。我现在在做的是
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.gca()
ax.text(0.0,0.0,"Test", fontsize=45)
ax.axis('off')
canvas.print_figure("output.png")
image = plt.imread("output.png")
我试过这个:
image = np.fromstring( canvas.tostring_rgb(), dtype='uint8' )
从我发现的一个例子,但它给了我一个错误,说'FigureCanvasAgg'对象没有属性'renderer'。
5条答案
按热度按时间oprakyz71#
为了将图形内容作为RGB像素值,
matplotlib.backend_bases.Renderer
需要首先绘制画布的内容。您可以手动调用
canvas.draw()
来完成此操作:See here以获取有关Matplotlib API的更多信息。
pkwftd7m2#
对于正在搜索此问题答案的人来说,这是从以前的答案中收集的代码。请记住,
np.fromstring
方法已被弃用,而使用np.frombuffer
。wgeznvg73#
从docs:
https://matplotlib.org/gallery/user_interfaces/canvasagg.html#sphx-glr-gallery-user-interfaces-canvasagg-py
cs7cruho4#
我认为有一些更新,这是更容易。
文档的更新版本:
jtjikinw5#
要修复大边距Jorge引用,请添加
ax.margins(0)
。详情请看这里。