Keras加载的png出现全黑

Keras loaded png appears full black

Keras 加载的 png 文件显示全黑

我有一组从 drawSvg 程序生成的 png。在像 Paint 这样的普通图像查看器中查看时,它们看起来很好。但是当我通过 keras 加载它们时,matplotlib imshow 显示它们全黑。

from keras.preprocessing.image import load_img,img_to_array
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('TKAgg')

img_path = "output/L_Profile.png"
img = load_img(img_path, target_size=(100, 100))
print(type(img)) # <class 'PIL.Image.Image'>

x = img_to_array(img)
print(type(x)) # <class 'numpy.ndarray'>
print(x.shape) # (100, 100, 3)
plt.imshow(x) # plt.imshow(x/255.) doesnt work either
plt.show()

L_Profile.png 是

在 matplotlib 显示中,这显示为全黑。我做错了什么吗?

另一个问题是,形状 (100,100,3) 不是我想要的,因为我需要将它传递给自动编码器密集层。我希望它是 (100,100,1)。理想情况下,图像应该只是纯黑色和白色。我尝试通过以下方式进行转换:

img = img.convert('1')
x = img_to_array(img)
print(type(x)) # <class 'numpy.ndarray'>
print(x.shape) # (100, 100, 1)
plt.imshow(x) # plt.imshow(x/255.) doesnt work either
plt.show() # TypeError: Invalid dimensions for image data

这里plt.show()本身就出错了。不确定发生了什么。

将黑白 png 图像打开到 keras 中这样的简单工作流程无法正常工作。

使用 PNG 时要格外小心。与 JPEG 不同的是,PNG 也可能有一个 alpha 通道。在渲染具有透明度的 PNG 时,不同的软件会采用不同的背景颜色。在您的情况下,整个 L 形都在 alpha 通道中编码,三个颜色通道完全为空。下面是图像在 Mac 的预览应用中的样子:

请注意,预览使用不同的背景颜色,问题立即变得明显。

还要注意,如果要使用imshow显示灰度图,需要压缩最后一个维度,这样数组形状就变成了(100,100)。

加载 Alpha 通道的方法如下:

img = load_img(img_path, color_mode='rgba', target_size=(100, 100))
print(type(img)) # <class 'PIL.Image.Image'>

x = img_to_array(img)
print(type(x)) # <class 'numpy.ndarray'>
print(x.shape) # (100, 100, 4)
x = x[:,:,3]
plt.imshow(x) # plt.imshow(x/255.) doesnt work either
plt.show()

图像中的颜色只是使用默认颜色图映射的灰度值。您可以使用 imshowcmap= 参数更改颜色图。

使用 JPEG 是最简单的方法。例如,如果您从 iOS 中的 UIView 生成文件,请使用 jpegData() 而不是 pngData()