无法在 PIL 中将 BMP 图像数据格式化为每像素 1 位



我有一个黑白bmp图像,我需要一次访问1个像素。我在网上找到了以下代码,但不是每个位的值为 1 或 0,而是 255 或 0。

import Image
img = Image.open(filename)
img = img.convert('1')
pix = img.load()

自己逐个像素地进行转换非常慢。

有人可以告诉我为什么上述方法不起作用吗?

你可以像这样转换它:

img.point(lambda x: bool(x))

但是为什么首先需要它是 0/1(而不是 0/255)呢?

也许numpy是一个很好的解决方案:

import numpy as np
from PIL import Image
#here, the image will be a numpy array
img = np.array(Image.open(filename)) / 255.

如果要将其转换回图像:

img = Image.fromarray(img)

一点细节:转换为 numpy 将翻转 x 和 y.转换回来将恢复原始位置。

最新更新