Загруженный керас png выглядит полностью черным - PullRequest
0 голосов
/ 17 апреля 2019

Png файл, загруженный Keras, выглядит полностью черным

У меня есть набор png-файлов, сгенерированных из программы drawSvg. Они выглядят хорошо при просмотре в обычном средстве просмотра изображений, таком как Paint. Но когда я загружаю их через keras, на iphow matplotlib они отображаются полностью черными.

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 (). Не уверен, что происходит.

Простой рабочий процесс, такой как открытие черно-белого изображения в керасе, не работает.

1 Ответ

0 голосов
/ 17 апреля 2019

Всегда будьте очень осторожны при использовании PNG. PNG в отличие от JPEG также могут иметь альфа-канал. Разное программное обеспечение будет использовать другой цвет фона при рендеринге PNG с прозрачностью. В вашем случае вся L-форма закодирована в альфа-канале, а три цветовых канала полностью пусты. Вот как выглядит изображение в приложении предварительного просмотра Mac:

enter image description here

Обратите внимание, что в Preview используется другой цвет фона, и проблема сразу становится очевидной.

Также обратите внимание, что если вы хотите показать изображение в градациях серого, используя imshow, вам нужно сжать последнее измерение, чтобы форма массива стала (100,100).

Вот как загрузить альфа-канал:

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.

...