matplotlib не может отображать отдельные пиксели или пиксели изображения в оттенках серого - PullRequest
1 голос
/ 05 января 2020

Я работал с проблемой с изображением и неожиданно наткнулся на камень где-то, когда мне пришлось проверять изображение на графике перед тренировкой по сети, и я обнаружил что-то странное. Я думал, что мой ImageDataGenerator не работает должным образом, но это было matplotlib. Я как работаю с полутоновыми изображениями.

, поэтому, если вы используете

data4 = np.random.randint(low=0,high=255,size=(137,236,4))
data3 = np.random.randint(low=0,high=255,size=(137,236,3))
data1 = np.random.randint(low=0,high=255,size=(137,236,1))

pyplot.imshow(data4)
pyplot.imshow(data3)

, он очень хорошо отображает случайный шум, но при этом

pyplot.imshow(data1) выдает ошибку Invalid shape (137, 236, 1) for image data

но опять-таки для

data = np.random.randint(low=0,high=255,size=(137,236))
pyplot.imshow(data)

он подготовлен очень хорошо. Почему это происходит? что заставляет pyplot выдавать ошибку при использовании c = 1?

1 Ответ

1 голос
/ 05 января 2020

Matplotlib может отображать одноканальные изображения. Из документации imshow , ввод X:

X: массив или PIL изображение Данные изображения. Поддерживаемые формы массива:

  • (M, N): изображение со скалярными данными. Данные визуализируются с использованием карты цветов.

  • (M, N, 3): изображение со значениями RGB (0-1 с плавающей запятой или 0-255 int).

  • (M, N, 4): изображение со значениями RGBA (0-1 с плавающей запятой или 0-255 int), т.е. с прозрачностью.

Первый два измерения (M, N) определяют строки и столбцы изображения.

Значения RGB (A) вне допустимого диапазона обрезаются.

Итак, ваш data3 предполагается, что это изображение RGB, data4 изображение RGBA, data одноканальное изображение, тогда как data1 имеет неправильные размеры для imshow() (используйте data1.squeeze(axis=2) вместо).

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