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)不是我想要的,因为我需要将它传递给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()本身出错了。不知道最近发生了什么。
像在bras中打开黑白图像这样的简单工作流程无法正常工作。
使用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=
的imshow
参数更改颜色贴图。