如何以真实灰度保存图片?

时间:2019-10-08 16:08:31

标签: python tensorflow matplotlib keras

我想以真实灰度保存MNIST数据集中的图片。通过“真实灰度”,我假设,如果我从硬盘加载图像并将它们加载到keras,它们将只有一个通道(而不是3个)。但是,如果我用plt.imsave('file.png',train_images[i],cmap = 'gray')保存图像,然后加载它们,则它们具有3个通道,因此我的带有神经网络的小程序需要一个通道(keras,张量流)输入,因此不起作用。或者我想让程序加载图像,但是我不应该说它们是灰度的,我希望程序自己确定它

1 个答案:

答案 0 :(得分:0)

您可能知道这一点,但是灰度图像只是2D数字数组,通常在[0,1]或[0,255]范围内。因此,您可以通过检查尺寸数来检查图像是否为灰度:如果图像为2,则为灰度;如果图像为2,则为灰度。如果它有3,则为颜色。 (如果最后一个维度的深度为4,则它具有R,G,B通道以及不透明度信息。)

问题似乎是您正在应用颜色图并保存具有4个通道(RGBA)的伪彩色图像。我认为您有几种选择:

  • 修改神经网络代码以仅使用您提供给它的数据的一个通道。由于您应用了灰度色图,因此RGB通道将全部相同。
  • 修改神经网络代码以接受NumPy数组而不是图像,并使用np.save()保存图像数组。
  • 以一种可以保存灰度图像的方式保存PNG。我建议通过pillow使用PIL

假设train_images[i]是一个二维数组,其值在[0,1]中,则可以这样做:

    from PIL import Image

    # Make it unsigned integers:
    data = (train_image[i] * 255).astype(np.uint8)

    # Make an Image object and save it:
    Image.fromarray(data).save('test.png')