2016-02-12 61 views
4

我想從一個Matplotlib圖中得到一個numpy數組圖像,並且我正在通過保存到一個文件然後再讀取該文件來做到這一點,但我覺得那裏必須是更好的方法。下面是我現在在做什麼: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」對象有沒有屬性「渲染」。

回答

11

爲了獲得圖像內容作爲RGB像素值,matplotlib.backend_bases.Renderer需要首先繪製畫布的內容。有關matplotlib API的更多信息

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.draw()  # draw the canvas, cache the renderer 

image = np.fromstring(canvas.tostring_rgb(), dtype='uint8') 

See here:您可以通過手動調用canvas.draw()做到這一點。

+0

完美的作品。謝謝! –

+6

我把img當成1d數組,你可以使用下面的代碼來修復: 'width,height = fig.get_size_inches()* fig.get_dpi()'和 'img = np.fromstring(canvas.to_string_rgb(),dtype ='uint8')。reshape(height,width,3) ' – MaxNoe