将图片作为灰度numpy数组读取,并将其保存回来

时间:2016-08-23 13:03:48

标签: image numpy image-processing python-3.3 pillow

我尝试了以下内容,期望看到源图像的灰度版本:

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()

但由于某种原因,整个图像中间有很多黑点。为什么会这样?

1 个答案:

答案 0 :(得分:3)

使用Pillow对象中的图像数据创建numpy数组时,请注意数组的默认精度为int32。我假设您的数据实际上是uint8,因为在实践中看到的大多数图像都是这样的。因此,您必须明确确保数组与图像中显示的类型相同。简单地说,在获得图像数据后确保数组为uint8,这将是代码 1 中的第四行。

arr = np.array(img.getdata(), dtype=np.uint8) # Note the dtype input

1。请注意,我在开头的代码中添加了两行,以便导入必要的包以使此代码正常工作(尽管图像处于脱机状态)。