Keras加载的png显示为全黑色

Keras加载的png显示为全黑色,keras,loadimage,Keras,Loadimage,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')

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()
从keras.preprocessing.image导入加载\u img、img\u到\u数组
将matplotlib.pyplot作为plt导入
导入matplotlib
matplotlib.use('TKAgg')
img_path=“output/L_Profile.png”
img=加载img(img\u路径,目标大小=(100100))
打印(类型(img))#
x=img_至_阵列(img)
打印(x型)
打印(x.shape)#(1001003)
plt.imshow(x)#plt.imshow(x/255)也不起作用
plt.show()
L_Profile.png是

在matplotlib show中,它显示为完全黑色。我做错什么了吗

另一个问题是,形状(100100,3)不是我想要的,因为我需要将其传递给Autoencoder稠密层。我希望这个是(100100,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
img=img.convert('1')
x=img_至_阵列(img)
打印(x型)
打印(x.shape)#(1001001)
plt.imshow(x)#plt.imshow(x/255)也不起作用
plt.show()#TypeError:图像数据的尺寸无效
这里plt.show()本身会出错。不知道发生了什么事


像在keras中打开黑白png图像这样的简单工作流程不起作用。

使用png时务必格外小心。与JPEG不同的PNG也可能具有alpha通道。当渲染具有透明度的PNG时,不同的软件将采用不同的背景色。在您的例子中,整个L形在alpha通道中编码,三个颜色通道完全为空。以下是Mac预览应用程序中图像的外观:

请注意,预览使用了不同的背景色,问题会立即显现出来

还请注意,如果要使用
imshow
显示灰度图像,则需要压缩最后一个维度,以便阵列形状变为(100100)

下面是如何加载alpha通道:

img=load\u img(img\u路径,颜色模式=rgba,目标大小=(100100))
打印(类型(img))#
x=img_至_阵列(img)
打印(x型)
打印(x.shape)#(1001004)
x=x[:,:,3]
plt.imshow(x)#plt.imshow(x/255)也不起作用
plt.show()


图像中的颜色只是使用默认颜色贴图映射的灰度值。您可以使用
imshow

cmap=
参数更改颜色贴图使用PNG时务必格外小心。与JPEG不同的PNG也可能具有alpha通道。当渲染具有透明度的PNG时,不同的软件将采用不同的背景色。在您的例子中,整个L形在alpha通道中编码,三个颜色通道完全为空。以下是Mac预览应用程序中图像的外观:

请注意,预览使用了不同的背景色,问题会立即显现出来

还请注意,如果要使用
imshow
显示灰度图像,则需要压缩最后一个维度,以便阵列形状变为(100100)

下面是如何加载alpha通道:

img=load\u img(img\u路径,颜色模式=rgba,目标大小=(100100))
打印(类型(img))#
x=img_至_阵列(img)
打印(x型)
打印(x.shape)#(1001004)
x=x[:,:,3]
plt.imshow(x)#plt.imshow(x/255)也不起作用
plt.show()


图像中的颜色只是使用默认颜色贴图映射的灰度值。您可以使用
imshow

cmap=
参数更改颜色贴图,使用JPEG是最简单的方法。例如,如果您在iOS中从UIView生成文件,使用jpegData()而不是pngData()

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

为什么要转换为numpy?尝试将x=Image.fromarray(数据“RGB”)转换回并显示它。同样考虑范围(/ 255),我的意思是它应该接受图像格式而不是NoPy。我已经提到过。如果我给其他颜色PNG,那么上面的代码就工作了,一旦PLT。IsSee(x/255)完成了……为什么要转换成NUMPY?尝试将x=Image.fromarray(数据“RGB”)转换回并显示它。同样考虑范围(/ 255),我的意思是它应该接受图像格式而不是NUMPY。我已经提到过。如果我给其他颜色PNG,那么上面的代码就工作了,一旦PLT。IsSee(x/255)就完成了。这是有效的。谢谢你的解释和建议。这很有效。谢谢你的解释和建议。