【问题标题】:Create image with PIL `Image.fromarray` results in AttributeError: 'list' object has no attribute '__array_interface__'使用 PIL `Image.fromarray` 创建图像导致 AttributeError:“list”对象没有属性“__array_interface__”
【发布时间】:2018-12-29 12:18:41
【问题描述】:

我想显示 NumPy 数组中的图像,但出现此错误:

Traceback (most recent call last):
  File "E:/wittos/python/SVM/witti svm/arraytoimage.py", line 14, in <module>
   image = Image.fromarray(arry)
  File "C:\Users\MOHAMED-WITTI-ADOU\AppData\Local\Programs\Python\Python35\lib\site-packages\PIL\Image.py", line 2483, in fromarray
    arr = obj.__array_interface__
AttributeError: 'list' object has no attribute '__array_interface__'

希望您能帮我解决这个错误。

import numpy as np
from PIL import Image

# Create a NumPy array
arry = np.array([3,3])
arry= [[25,25,25],[0,0,0],[0,0,0]]

# Create a PIL image from the NumPy array
image = Image.fromarray(arry)

# Save the image
image.save('image.jpg')

【问题讨论】:

    标签: python numpy python-imaging-library


    【解决方案1】:

    您创建 numpy 数组的方式是错误的。您应该将其创建为:

    arry = np.array([[25,25,25],[0,0,0],[0,0,0]])
    

    然后它将起作用。因为,您正在覆盖使用普通数组创建的空 numpy 数组。

    import numpy as np
    from PIL import Image
    
    # Create a NumPy array
    arry = np.array([[25,25,25],[0,0,0],[0,0,0]])
    
    # Create a PIL image from the NumPy array
    image = Image.fromarray(arry.astype('uint8'))
    
    # Save the image
    image.save('image.jpg')
    

    这会起作用。

    【讨论】:

    【解决方案2】:

    问题是你没有创建一个 numpy 数组:

    # Create a NumPy array
    arry = np.array([3,3])
    arry= [[25,25,25],[0,0,0],[0,0,0]]
    

    当您这样做时,arry 会变成列表的list,因此会出现错误:

    AttributeError: 'list' 对象没有属性 'array_interface'

    你应该这样做:

    import numpy as np
    from PIL import Image
    
    # Create a NumPy array
    arry = np.array([[25, 25, 25], [0, 0, 0], [0, 0, 0]], dtype=np.uint8)
    
    # Create a PIL image from the NumPy array
    image = Image.fromarray(arry)
    
    # Save the image
    image.save('image.jpg')
    

    注意上面指定arrydtype为np.uint8。

    【讨论】:

    • @MohamedWittiAdou 很高兴我能提供帮助,如果您发现我的回答有帮助,请考虑将其标记为已接受。
    • 完成了,但是我想调整创建的图像的大小,我该怎么办?因为我要把它用作边缘检测的训练图像。建议......
    • 只要改变你创建np.array的方式,你就可以创建一个你喜欢的维度的随机矩阵
    • 我想保持这样的矩阵。只是我想改变创建图像的宽度和高度,因为它看起来太小了。有没有办法调整?
    • 保持这样的矩阵是什么意思?创建的矩阵与图片大小一一对应
    猜你喜欢
    • 2020-11-29
    • 2021-02-17
    • 1970-01-01
    • 2023-04-09
    • 2014-09-08
    • 2016-01-30
    • 2020-12-15
    • 2016-04-15
    • 2014-04-15
    相关资源
    最近更新 更多