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

时间:2017-04-12 07:45:33

标签: python arrays numpy matplotlib

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

  public class OverflowedByte {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int limit = scan.nextInt();
    int countOverflows = 0;
    for (byte i = -128; i < limit; i++) {           
        if (i == Byte.MAX_VALUE) {
            countOverflows++;
            i = Byte.MIN_VALUE;
            System.out.println(countOverflows);    
        }
     }
  }
}

如果我使用:

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

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

1 个答案:

答案 0 :(得分: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]])

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

fig.canvas.draw()

以数组形式获取数据:

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

如果您希望阵列与原始图像的形状相同,则必须使用figsize的{​​{1}}和dpi属性进行播放。

最后,如果您想要灰度图,则matplotlib会返回RGB图像:

plt.figure()