【问题标题】:Can't format BMP image data to 1 bit per pixel in PIL无法在 PIL 中将 BMP 图像数据格式化为每像素 1 位
【发布时间】:2018-01-20 05:05:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python python-imaging-library


    【解决方案1】:

    你可以这样转换:

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

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

    【讨论】:

    • 谢谢,我会试试的。我需要它是二进制的,因为我要将数据写入 LCD 屏幕。
    • 这里不需要lambda,应该可以img.point(bool)
    【解决方案2】:

    也许 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。转换回来将恢复原来的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-13
      • 2022-01-02
      • 2017-08-31
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多