我需要处理大约 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/