在Pyhton上我想创建一个从黑色到白色的图片,我写了下面的代码。但我认为我犯的是一个非常小的错误,这就是结果。
我其实想要创建一个类似的图像。你能看出我弄错了吗?
import numpy as np
from PIL import Image
width = 100
height = 100
img = np.zeros((height, width), dtype=np.uint8)
xx, yy=np.mgrid[:height, :width]
circle = (xx - 50)**2 + (yy- 50)**2
for x in range (img.shape[0]):
for y in range (img.shape[1]):
intensity = circle[x][y]
img[x][y]= intensity
Image.fromarray(img, 'L').show()
Image.fromarray(img, 'L').save ('circlebad.png', 'PNG')
< ----------------------------------编辑---------- ------------------------------>
插入时; intensity = intensity / 512
我的问题解决了。最后的代码;
import numpy as np
from PIL import Image
width = 100
height = 100
img = np.zeros((height, width), dtype=np.uint8)
xx, yy=np.mgrid[:height, :width]
circle = (xx - 50)**2 + (yy- 50)**2
for x in range (img.shape[0]):
for y in range (img.shape[1]):
intensity = circle[x][y]
intensity = intensity / 512
img[x][y]= intensity
Image.fromarray(img, 'L').show()
Image.fromarray(img, 'L').save ('circlebad.png', 'PNG')
答案 0 :(得分:3)
正如其他人所说,你在顶部图像中得到输出的原因是因为强度必须在range(256)
,并且Numpy算法对你的代码的值有效地做% 256
制备
这是修复后的代码版本。
import numpy as np
from PIL import Image
width = height = 320
radius = (width - 1) / 2
xx, yy = np.mgrid[:height, :width]
# Compute the raw values
circle = (xx - radius) ** 2 + (yy - radius) ** 2
#Brightness control
maxval = 255
valscale = maxval / (2 * radius ** 2)
circle = (circle * valscale).astype(np.uint8)
img = Image.fromarray(circle, 'L')
img.show()
img.save('circle.png')
输出:circle.png