假设我有一个 2D Numpy 数组,其值范围在 0 到 1 之间,它表示灰度图像。然后如何将其转换为 PIL Image 对象?迄今为止的所有尝试都产生了极其奇怪的分散像素或黑色图像。
for x in range(image.shape[0]):
for y in range(image.shape[1]):
image[y][x] = numpy.uint8(255 * (image[x][y] - min) / (max - min))
#Create a PIL image.
img = Image.fromarray(image, 'L')
在上面的代码中,numpy 数组图像通过 (image[x][y] - min) / (max - min) 进行归一化,因此每个值都在 0 到 1 的范围内。然后将其乘以 255 并转换为8 位整数。理论上,这应该通过模式 L 的 Image.fromarray 处理成灰度图像 - 但结果是一组分散的白色像素。
我认为答案是错误的。 Image.fromarray( ____ , 'L') 函数似乎只适用于 0 到 255 之间的整数数组。我为此使用 np.uint8 函数。
如果您尝试制作渐变,您可以看到这一点。
import numpy as np
from PIL import Image
# gradient between 0 and 1 for 256*256
array = np.linspace(0,1,256*256)
# reshape to 2d
mat = np.reshape(array,(256,256))
# Creates PIL image
img = Image.fromarray(np.uint8(mat * 255) , 'L')
img.show()
形成干净的渐变
vs
import numpy as np
from PIL import Image
# gradient between 0 and 1 for 256*256
array = np.linspace(0,1,256*256)
# reshape to 2d
mat = np.reshape(array,(256,256))
# Creates PIL image
img = Image.fromarray( mat , 'L')
img.show()
具有相同类型的神器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)