我正在尝试使用将 numpy 矩阵保存为灰度图像Image.fromarray
。它似乎适用于随机矩阵,但不适用于特定矩阵(应该出现一个圆圈)。谁能解释我做错了什么?
from PIL import Image
import numpy as np
radius = 0.5
size = 10
x,y = np.meshgrid(np.linspace(-1,1,size),np.linspace(-1,1,size))
f = np.vectorize(lambda x,y: ( 1.0 if x*x + y*y < radius*radius else 0.0))
z = f(x,y)
print(z)
zz = np.random.random((size,size))
img = Image.fromarray(zz,mode='L') #replace z with zz and it will just produce a black image
img.save('my_pic.png')
Image.fromarray
浮点输入定义不明确;它没有很好的文档记录,但该函数假设输入被布局为无符号 8 位整数。
要产生您想要获得的输出,请乘以 255 并转换为uint8
:
z = (z * 255).astype(np.uint8)
它似乎适用于随机数组的原因是,当该数组中的字节解释为无符号 8 位整数时,看起来也是随机的。但输出与输入不是相同的随机数组,您可以通过对随机输入进行上述转换来检查:
np.random.seed(0)
zz = np.random.rand(size, size)
Image.fromarray(zz, mode='L').save('pic1.png')
Image.fromarray((zz * 255).astype('uint8'), mode='L').save('pic2.png')
由于这个问题似乎没有在任何地方报告,我在github上报告了它:https://github.com/python-pillow/Pillow/issues/2856
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)