Keras加载的png显示为全黑

时间:2019-04-17 05:38:49

标签: keras loadimage

Keras加载的Png文件显示为全黑

我有一组来自drawSvg程序的png。在普通的图像查看器(如“画图”)中查看时,它们看起来很好。但是,当我通过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是

enter image description here

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

另一个问题是形状(100,100,3)不是所需要的,因为我需要将此形状传递给Autoencoder Dense层。我希望这是(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图像到喀拉拉邦这样的简单工作流程不起作用。

2 个答案:

答案 0 :(得分:0)

使用PNG时始终要格外小心。与JPEG不同的PNG也可能具有Alpha通道。渲染具有透明性的PNG时,不同的软件将采用不同的背景色。在您的情况下,整个L形都在alpha通道中编码,并且三个颜色通道完全为空。这是图像在Mac的“预览”应用中的外观:

enter image description here

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

还要注意,如果要使用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()

enter image description here

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

答案 1 :(得分:0)

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