我正试图找到一种方法将matplotlib图转换为没有任何空格或边框的numpy数组。
我发现如果我使用下面的代码,我会得到一些非常接近的东西,但是numpy数组“数据”仍然会有一些白色边框。白色边框(当我缩放窗口时白色更改)保存为numpy数组的一部分,但我只想要内容。
有没有办法摆脱这个白色区域?
fig = plt.figure(frameon=False)
ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()
ax.set_ylim(height, 0)
ax.set_xlim(0, width)
ax.axis('off')
fig.add_axes(ax)
ax.imshow(myimage) # Plus lots of other things
plt.show() # fig.canvas.draw() also works the same
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
plt.close()
先前已经问过类似的问题here,但作者自己的PIL解决方案并不符合我的需要。
答案 0 :(得分:0)
我猜subplots_adjust
是关键所在。似乎可以使用玩具示例,但是您可以提供最少的工作代码以查看它是否适用于您的用例。
import numpy as np
import matplotlib as mpl
# mpl.use('Agg')
import matplotlib.pyplot as plt
img = np.ones((100, 200))
img[25:75, 50:150] = 0
fig = plt.figure()
ax = fig.gca()
ax.imshow(img)
ax.axis('tight')
plt.subplots_adjust(0,0,1,1,0,0)
plt.show()
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
w, h = fig.canvas.get_width_height()
data = data.reshape((h, w, 3))
plt.close()