【问题标题】:create a grayscale image创建灰度图像
【发布时间】:2010-01-22 01:12:12
【问题描述】:

我正在从一个文件中读取二进制数据,该文件指定跨 x 和 y 坐标的强度值(不是开源图像格式),并希望将其转换为 PNG 图像(或其他广泛支持的格式)。我将数据加载到一个数组中(使用数组模块),其中每个元素都是从 0 到 255 的整数。要将其保存到 PNG,我可以像这样创建每个元素 (x) 的 3 项元组:

t = (x, x, x)

add 使用 map() 在整个数组中应用它,然后使用 putdata() 保存图像。但是,转换为元组数组需要很长时间(几分钟)。有没有办法只使用一个整数(不是元组)来指定 rgb 值。我猜另一种方法是使用 NumPy,但我不知道从哪里开始,所以在这方面的任何帮助也将不胜感激。

提前感谢您的帮助。

【问题讨论】:

    标签: python python-imaging-library


    【解决方案1】:

    当你创建新图像时,给它模式 L:

    im = Image.new('L', size)
    im.putdata([x1, x2, x3, ...])
    

    其中 data 是值列表而不是元组。

    【讨论】:

    • 正是我想要的。谢谢!
    【解决方案2】:

    有几种方法可以做到这一点,但如果您已经在内存中拥有数据,请考虑使用 Image.frombuffer 或 Image.fromstring 并使用 'L' 模式(用于 8 位灰度数据)。

    【讨论】:

      【解决方案3】:

      im.putpixel(xy, colour) 会是你要找的吗?

      【讨论】:

      • putpixel 比 putdata 慢很多
      • 我同意。我在以前的版本中使用了 putpixel() 。有效,但速度慢了约 10 倍。 (putdata() 为 1 分 30 秒 vs 0 分 15 秒)
      猜你喜欢
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 2021-10-05
      • 1970-01-01
      • 2022-11-15
      • 2014-10-07
      • 2015-11-04
      相关资源
      最近更新 更多