Построить массив Numpy с размерами (1, 2208, 2752, 3) - PullRequest
0 голосов
/ 09 января 2020

У меня есть массив микроскопии, и я хочу построить его.

Форма:

(1, 2208, 2752, 3)

И я пытаюсь построить ее с помощью следующего кода:

from PIL import Image
im = Image.fromarray(image_array)
im.show()

И получите эту ошибку:

  Traceback (most recent call last):
  File "/Users/x/anaconda3/envs/x/lib/python3.6/site-packages/PIL/Image.py", line 2515, in fromarray
    mode, rawmode = _fromarray_typemap[typekey]
KeyError: ((1, 1, 2752, 3), '|u1')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/x/Desktop/x/x/test.py", line 21, in <module>
    im = Image.fromarray(image_arrays)
  File "/Users/x/x/x/x/lib/python3.6/site-packages/PIL/Image.py", line 2517, in fromarray
    raise TypeError("Cannot handle this data type")
TypeError: Cannot handle this data type


Если я изменю размер массива до (2000,2000,3), это работает, но с 1 в первом измерении я понятия не имею, как может ли это работать Тип файла .czi и его обычное изображение.

1 Ответ

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

Для отображения изображения вам нужна матрица x на y на (r,g,b). Кажется, у вас в матрице четвертое измерение, поэтому я предполагаю, что любая процедура, которую вы используете для создания массива, на самом деле создает массив изображений.

Поскольку у вас есть только одно изображение, вы можете просто удалить первую ось, используя image_array = numpy.squeeze(image_array, axis=0). Это возвращает только один массив изображений в форме (2208, 2752, 3). Вы также можете сделать: im = Image.fromarray(image_array[0])

from PIL import Image
image_array = numpy.squeeze(image_array, axis=0)
im = Image.fromarray(image_array)
im.show()
...