Keras加载的png显示全黑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keras加载的png显示全黑相关的知识,希望对你有一定的参考价值。

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是

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()本身出错了。不知道最近发生了什么。

像在bras中打开黑白图像这样的简单工作流程无法正常工作。

答案

使用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=imshow参数更改颜色贴图。

以上是关于Keras加载的png显示全黑的主要内容,如果未能解决你的问题,请参考以下文章

纹理上的片段着色器

如何将 keras 模型文件加载到 OpenCV 代码中?

如何使用 ViewPager 显示相同的片段,但每次加载不同的数据?

如何使用 keras 加载图像并显示图像?

如何在android中将json数据加载到片段中

使用土壤加载 .png 纹理,问题