我尝试了以下内容,期望看到源图像的灰度版本:
from PIL import Image
import numpy as np
img = Image.open("img.png").convert('L')
arr = np.array(img.getdata())
field = np.resize(arr, (img.size[1], img.size[0]))
out = field
img = Image.fromarray(out, mode='L')
img.show()
但由于某种原因,整个图像中间有很多黑点。为什么会这样?
答案 0 :(得分:3)
使用Pillow对象中的图像数据创建numpy
数组时,请注意数组的默认精度为int32
。我假设您的数据实际上是uint8
,因为在实践中看到的大多数图像都是这样的。因此,您必须明确确保数组与图像中显示的类型相同。简单地说,在获得图像数据后确保数组为uint8
,这将是代码 1 中的第四行。
arr = np.array(img.getdata(), dtype=np.uint8) # Note the dtype input
1。请注意,我在开头的代码中添加了两行,以便导入必要的包以使此代码正常工作(尽管图像处于脱机状态)。