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

标签 image numpy image-processing python-3.3 python-imaging-library

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

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,因此这将是代码中的第四行1

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

1。请注意,我在开始时在您的代码中添加了两行,以导入此代码运行所需的包(尽管图像处于离线状态)。

关于image - 将图片读取为灰度numpy数组,并保存回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39102051/

相关文章:

html - react 错误: Style prop value must be an object react/style-prop-object

c++ - 缩放位图输出会扭曲图像

python - 如何在灰度图像上应用渐变贴图

python - 当 x 和 y 值作为 numpy 数组给出时,查找所有局部最大值和最小值

从 opencv 中的浮点像素坐标重新映射图像

python - 用NumPy填充图像会全黑

c# - 使用 C# 调整透明图像的大小

image - 复制移动算法不起作用

python - numpy 数组的平均像素减法

Python OpenCV - 文件旋转,但颜色值被覆盖