Как распечатать или преобразовать массив np 240 * 240 * 4 в 240 * 240 * 1? - PullRequest
0 голосов
/ 16 января 2019

Я ищу что-то, где я просто хочу напечатать первый канал массива np.

Оригинальный размер = 240 * 240 * 4 Целевой размер = 240 * 240 * 1 (только первый канал.

Я попробовал, ниже, но, кажется, работает.

image[:,:,:1]

Но сохранение обратно с размером 240 * 240 * 1 в png или jpg не работает

Пример кода

import numpy as np
from PIL import Image
import scipy.misc as sp
image = np.array(Image.open("FLAIR-148.png"))
test_image = image[:,:,:1]
sp.imsave('out.png', test_image)

выход

File "/anaconda3/lib/python3.6/site-packages/scipy/misc/pilutil.py", line 327, in toimage
raise ValueError("'arr' does not have a suitable array shape for "
ValueError: 'arr' does not have a suitable array shape for any mode.

1 Ответ

0 голосов
/ 16 января 2019

Если вы не нарезаете последний индекс (т.е. делаете image[:, :, 1]), тогда все должно работать нормально:

import numpy as np
from PIL import Image
import scipy.misc as smc

image = np.array(Image.open("FLAIR-148.png"))
test_image = image[:, :, 1]
smc.imsave('out.png', test_image)

По сути, scipy.misc.imsave не знает, что делать с массивом формы (M, N, 1). Однако он знает, что должен сохранить массив формы (M, N) в виде изображения в градациях серого.

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

import scipy.misc as smc

# get the test image as an array
img = smc.face()

# slice test image
img = img[:, :, 1]

# convert to uint8
img = img.astype('uint8')

# save
smc.imsave('test.png', img)

Выход:

enter image description here

Протест

scipy.misc.imsave устарело . Вместо этого рекомендуется использовать imageio.imwrite.

...