我正在寻找只想打印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.

最佳答案

如果您不对最后一个索引进行切片(即执行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)


输出:

python - 如何将240 * 240 * 4的np数组打印或转换为240 * 240 * 1?-LMLPHP

警告

scipy.misc.imsave is deprecated。建议改用imageio.imwrite

关于python - 如何将240 * 240 * 4的np数组打印或转换为240 * 240 * 1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54207293/

10-12 21:15