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是
在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图像到喀拉拉邦这样的简单工作流程不起作用。
答案 0 :(得分:0)
使用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()
图像中的颜色只是使用默认颜色图映射的灰度值。您可以使用cmap=
的{{1}}参数更改颜色图。
答案 1 :(得分:0)
使用JPEG是最简单的方法。例如,如果要从iOS中的UIView生成文件,请使用jpegData()而不是pngData()