【问题标题】:Importing large number of images into Python to convert to Numpy array将大量图像导入 Python 以转换为 Numpy 数组
【发布时间】:2020-05-20 11:58:57
【问题描述】:

我正在尝试导入大量图像并将它们转换为数组,以根据每个像素的颜色和图片中包含的形状在图像之间进行相似性比较。我在导入数据时遇到问题,以下代码适用于少量图像 (10-20),但不适用于较大的图像(我的总目标是为此项目导入 10,000 个)。

from PIL import Image
import os,os.path
imgs=[]
path="Documents/data/img"
os.listdir(path)
valid_images =[".png"]

for f in os.listdir(path):
    ext= os.path.splitext(f)[1]
    if ext.lower() not in valid_images:
        continue
    imgs.append(Image.open(os.path.join(path,f)))

当我执行此操作时,我会收到以下消息

OSError: [Errno 24] 打开的文件太多:'Documents/data/img\81395.png'

有没有办法编辑可以同时打开多少个文件?或者在我去“关闭”图像时将这些表转换为数组的更有效方法?我对这种分析非常陌生,因此感谢任何提示或指示。

【问题讨论】:

    标签: python image-processing python-imaging-library


    【解决方案1】:

    不要存储 PIL.Image 对象,而是将它们转换为 numpy 数组。为此,您需要将添加图像到列表的行更改为:
    ''' imgs.append(np.asarray(Image.open(os.path.join(path,f)))) '''

    【讨论】:

    • 谢谢,非常有帮助!我对输出结构有点困惑。它看起来像一个元组列表,我是否将它们解释为特定像素的 RGB 值?如果是这样,我如何将它与该值关联的像素相关联?
    • 这些是图像每一层的 RGB 值。灰度将有一个单层,例如形状为 100x100 的数组将表示 100x100 像素的灰度图像,而 RGB 图像将是形状为 100x100x3 的数组。这就是您在该列表中看到的内容。我建议查找一些关于使用数组在 python 中进行图像处理的教程。例如这样的事情:https://scipy-lectures.org/advanced/image_processing/
    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2016-03-17
    • 2018-08-22
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多