如何将灰度matplotlib图保存到numpy数组

pfc*_*pfc 5 python arrays numpy matplotlib

例如,我使用matplotlib绘制图形如下:

plt.figure(figsize=(10,10))
plt.imshow(output_fig, zorder=0,cmap="gray")
plt.scatter(x,y,color='k')
Run Code Online (Sandbox Code Playgroud)

如果我使用:

plt.savefig(figname,fotmat=figtype)
Run Code Online (Sandbox Code Playgroud)

我将它保存为图形文件.但是,我想将它保存到矩阵或numpy数组中,这样每个元素都可以保存图中每个像素的比例值.我怎样才能做到这一点?我找到了保存RGB值的解决方案.但我希望能保存一个灰度数字.谢谢大家的帮助!

Ima*_*ngo 5

一旦你有一个绘图数据(自包含示例下面):

import numpy as np
import matplotlib.pyplot as plt
from skimage import data, color

img = data.camera()

x = np.random.rand(100) * img.shape[1]
y = np.random.rand(100) * img.shape[0]

fig = plt.figure(figsize=(10,10))
plt.imshow(img,cmap="gray")
plt.scatter(x, y, color='k')
plt.ylim([img.shape[0], 0])
plt.xlim([0, img.shape[1]])
Run Code Online (Sandbox Code Playgroud)

可以使用fig.canvas(matplotlib的画布)将基础数据恢复为数组.首先触发它的绘图:

fig.canvas.draw()
Run Code Online (Sandbox Code Playgroud)

获取数据为数组:

width, height = fig.get_size_inches() * fig.get_dpi()
mplimage = np.fromstring(fig.canvas.tostring_rgb(), dtype='uint8').reshape(height, width, 3)
Run Code Online (Sandbox Code Playgroud)

如果您希望阵列与原始图像具有相同的形状,则必须使用figsize其中的dpi属性plt.figure().

最后,如果你想要灰度图,matplotlib会返回一个RGB图像:

gray_image = color.rgb2gray(mplimage)
Run Code Online (Sandbox Code Playgroud)