Python matplotlib, неверная форма для данных изображения - PullRequest
2 голосов
/ 28 апреля 2020

В настоящее время у меня есть этот код, чтобы показать три изображения:

imshow(image1, title='1')
imshow(image2, title='2')
imshow(image3, title='3')

И он отлично работает. Но я пытаюсь поместить их все три в ряд вместо столбца.

Вот код, который я пробовал:

f = plt.figure()
f.add_subplot(1,3,1)
plt.imshow(image1)
f.add_subplot(1,3,2)
plt.imshow(image2)
f.add_subplot(1,3,3)
plt.imshow(image3)

Выдает

Ошибка типа: невозможно преобразовать тензор CUDA в numpy. Используйте Tensor.cpu (), чтобы сначала скопировать тензор в память хоста.

Если я сделаю

f = plt.figure()
f.add_subplot(1,3,1)
plt.imshow(image1.cpu())
f.add_subplot(1,3,2)
plt.imshow(image2.cpu())
f.add_subplot(1,3,3)
plt.imshow(image3.cpu())

Выдает

TypeError: Invalid форма (1, 3, 128, 128) для данных изображения

Как это исправить или есть более простой способ реализовать это?

1 Ответ

2 голосов
/ 28 апреля 2020

Функция matplotlib 'imshow' получает 3-канальные изображения в виде (h, w, 3), как вы можете видеть в документации .

Похоже, что вы пропустили пакет "одного изображения (первое измерение) из трех каналов (второе измерение) изображения (h и w - третье и четвертое измерение).

Вам необходимо изменить или просмотреть свое изображение (после преобразования в процессор попробуйте использовать:

image1.squeeze().permute(1,2,0)

Результатом будет изображение нужной формы (128, 128, 3).

Функция squeeze () удалит первое измерение. И функция premute () транспонирует измерение, в котором первое сместится на третью позицию, а два других сместятся на начало.

Кроме того, посмотрите здесь для дальнейшего обсуждения проблем с графическим процессором и процессором: ссылка

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

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