Я хочу использовать matplotlib, чтобы показать цифру в градациях серого, преобразованную в tenorflow 2.0 - PullRequest
0 голосов
/ 21 января 2020

Я новичок в TensorFlow 2.0, и после загрузки фигуры я хочу построить диаграмму в градациях серого, преобразованную в тензорном потоке, но, к сожалению, возникла ошибка.

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

im = tf.io.read_file('/home/1.png')
image = tf.image.decode_png(im)
image_gray = tf.image.rgb_to_grayscale(image)

plt.figure()
plt.imshow(image_gray)

Затем выскакивает ошибка:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/zhongl/miniconda3/envs/tf2/lib/python3.7/site-packages/matplotlib/pyplot.py", line 2677, in imshow
    None else {}), **kwargs)
  File "/home/zhongl/miniconda3/envs/tf2/lib/python3.7/site-packages/matplotlib/__init__.py", line 1599, in inner
    return func(ax, *map(sanitize_sequence, args), **kwargs)
  File "/home/zhongl/miniconda3/envs/tf2/lib/python3.7/site-packages/matplotlib/cbook/deprecation.py", line 369, in wrapper
    return func(*args, **kwargs)
  File "/home/zhongl/miniconda3/envs/tf2/lib/python3.7/site-packages/matplotlib/cbook/deprecation.py", line 369, in wrapper
    return func(*args, **kwargs)
  File "/home/zhongl/miniconda3/envs/tf2/lib/python3.7/site-packages/matplotlib/axes/_axes.py", line 5679, in imshow
    im.set_data(X)
  File "/home/zhongl/miniconda3/envs/tf2/lib/python3.7/site-packages/matplotlib/image.py", line 690, in set_data
    .format(self._A.shape))
TypeError: Invalid shape (321, 327, 1) for image data

Но оригинальная преобразованная фигура без вопросов.

plt.figure()
plt.imshow(image)
plt.show()

1 Ответ

0 голосов
/ 21 января 2020

Важная часть вашего сообщения об ошибке:

TypeError: Неверная форма (321, 327, 1) для данных изображения

Очевидно, TensorFlow's rgb_to_grayscale сохраняет преобразованные изображения таким образом:

Размер последнего измерения на выходе равен 1, содержащему значение оттенков серого в пикселях.

Тем не менее, Matplotlib не может обрабатывать данные таким образом для изображений в градациях серого, но ожидает форму, подобную (321, 327), то есть без одномерных данных.

Поскольку вы имеете дело с NumPy массивами здесь, Вы можете использовать метод NumPy squeeze, чтобы избавиться от дополнительного измерения:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

im = tf.io.read_file('/home/1.png')
image = tf.image.decode_png(im)
image_gray = tf.image.rgb_to_grayscale(image).squeeze()   # <-- !

plt.figure()
plt.imshow(image_gray)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...