Невозможно преобразовать массив numpy в изображение RGB

#python #numpy #matplotlib #reshape #numpy-ndarray

#python #numpy #matplotlib #изменить #numpy-ndarray

Вопрос:

У меня есть массив numpy, который состоит из всех изображений из набора данных CIFAR10: (50000, 3072)

Я извлекаю из него один массив, его форма (3072,) затем пытаюсь преобразовать его в изображение RGB, выполнив .reshape(32, 32, 3)

Но когда я передаю его в plt.show(), он показывает что-то вродевведите описание изображения здесь

Я не уверен, почему он не отображает изображение правильно, я также пробовал, .reshape(3, 32, 32) но это дает TypeError: Invalid shape (3, 32, 32) for image data при построении графика

Как мне изменить его правильно?

Ответ №1:

Вы должны попытаться np.swapaxes() получить допустимую форму для plt.imshow() принятия.

 import numpy as np
dd = np.array([1]*3072).reshape(3, 32, 32)
dd1 = np.swapaxes(dd, 0, 2)
  

Попробуйте plt.imshow(dd1) посмотреть, что произойдет. (используйте свои собственные данные): p

Прежде всего, вы должны изменить форму, используя (3, 32, 32), это определяется порядком ваших данных.

Затем вы должны отобразить измененное изображение, но plt.imshow() принимает только массив с формой (M, N) или (M, N, 3) или (M, N, 4), поэтому теперь вам нужно поменять оси местами, поскольку измененные данные равны (3, 32, 32). Подробности смотрите на plt.imshow и здесь

Комментарии:

1. построенное изображение поворачивается на 90 градусов против часовой стрелки

2. Вы можете перевернуть или транспонировать изображение с помощью np.flip , не уверен, какой из них подходит для вас 🙂

3. использование @batman np.rot90(dd1, 3) сработало для меня, здесь я поворачиваю изображение на 270 градусов.

4. Я думаю, это сработает, только если изображение квадратное. Если есть изображение img в форме (3, M, N), где M ! = N, то для преобразования его в (M, N, 3) требуется несколько вызовов функции swapaxes, подобных этому: np.swapaxes(np.swapaxes(img, 0, 1), 1, 2)