繁体   English   中英

来自 numpy 数组索引的 PIL 图像

[英]PIL Image from numpy array indexing

事实证明,这是 PIL 7.0 之前版本中的一个非常具体的错误。 我把它留在这里是因为我看到其他人遇到了同样的问题,并且对你所看到的内容没有很好的概述。 这里没有编程错误 - 解决方案是“升级 PIL”

我正在将 numpy boolean 数组(即掩码)转换为PIL图像,并看到一个非常奇怪的行为。

# using PIL pixel access - works as expected
img = Image.new('1', (100, 100)) # '1' for 1-bit image mode
img_pixels = img.load()

for x in range(1, 99):
    for y in range(1, 50):
        img_pixels[x,y] = True

img

PIL Pixel Access 版本

# Numpy array, turning into a PIL image. 
ary = np.zeros((100,100), dtype=np.bool)

for x in range(1, 99):
    for y in range(1, 50):
        ary[x,y] = True
      
Image.fromarray(ary)

麻木版本

如果我检查ary的值,则显示True值已正确设置。

那么为什么这些图像不同呢?

编辑:

如果我为 numpy 版本反转 x 和 y,我会得到这个。 很明显,正在发生其他事情,因为如果只是颠倒了行和列,我应该得到相同的形状但垂直对齐。

ary = np.zeros((100,100), dtype=np.bool)

for x in range(1, 99):
    for y in range(1, 50):
        ary[y,x] = True # note that rows and columns are reversed
      
Image.fromarray(ary)

numpy 使用列、行排序

PIL 具有相反的xy位置。 要修复它,请在代码中交换xy

ary = np.zeros((100,100), dtype=np.bool)

for x in range(1, 99):
    for y in range(1, 50):
        ary[y,x] = True
      
Image.fromarray(ary)

在此处输入图像描述

事实证明,这是 PIL 早期版本中的一个错误,至少已由 7.0 版修复

  • 皮尔:7.2.0
  • numpy:1.19.1

行为符合预期。 感谢@furas 的帮助测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM