Python - 加载大量图像而不使用所有可用的内存

标签 python image numpy python-imaging-library

我需要处理大约 1.5 GB 的图像。问题是,当我尝试将它们加载为 np 数组时,我似乎用完了所有内存(8 GB)。

这是我加载图像的方法:

def load_image( infilename ) :
    img = Image.open( infilename )
    img.load()
    data = np.asarray( img, dtype="int32" )
    img.close()
    del img
    return data

我认为关闭并删除 img 会有所帮助,但事实并非如此。这可能与垃圾收集有关吗?

循环遍历文件名列表中所有图像的代码:

for i in range(len(files)):
    imgArray = imgs.load_image(files[i])
    images.append(imgArray)
    shapes.append(np.shape(imgArray))

有更好的方法吗?

最佳答案

使用 PIL 逐个加载图像文件来获取它们的大小元组,收集有关平均值等的统计信息,然后在 numpy 或 PIL 中再次打开它们以进行实际处理可能是值得的。您可能还想考虑对统计部分进行采样,这样您就不需要加载所有这些部分,但无论如何也不需要那么长时间,PIL 相对高效。

关于Python - 加载大量图像而不使用所有可用的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37082115/

相关文章:

image - GAE webapp2_extras session 内存限制(在 session 中存储临时图像)

java - 如何在JAVA中使用控制点来合成图像?

javascript - 不知道图片类型时的Base64图片SRC

python - 为什么 pandas 在简单的数学运算上比 numpy 更快?

python - 用大数组中的零替换空值或缺失值

python - 修改/覆盖 NumPy 数组

python - 合并不同长度的python列表

python - 将字符串转换为元组

python - 从 Python 源代码中提取注释

python - 使用 pytables 构建一个巨大的 numpy 数组