关于图片:将图片读取为灰度numpy数组,并保存回来

Read the picture as a grayscale numpy array, and save it back

我尝试了以下方法,希望看到源图像的灰度版本:

1
2
3
4
5
6
7
8
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()

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


当您使用 Pillow 对象中的图像数据创建 numpy 数组时,请注意该数组的默认精度为 int32。我假设您的数据实际上是 uint8 因为在实践中看到的大多数图像都是这种方式。因此,您必须明确确保该数组与您在图像中看到的类型相同。简而言之,确保在获取图像数据后数组为 uint8,这将是 code1.

中的第四行

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

1。请注意,我在您的代码开头添加了两行,以导入此代码工作所需的包(尽管图像离线)。