[英]Python - load lots of images without using all available ram
我有大约1.5 GB的图像需要处理。 问题是,当我尝试将它们作为np数组加载时,我似乎用光了我所有的ram(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相对有效。
您也许可以使用手动垃圾回收来清除循环之间的某些内存:
def memclear():
import gc #garbage collector
cleared = gc.collect()
print(cleared)
在每个循环结束时致电: memclear()
,因此:
for i in range(len(files)):
imgArray = imgs.load_image(files[i])
images.append(imgArray)
shapes.append(np.shape(imgArray))
memclear()
希望这可以解决它。 我认为这是不受欢迎的,因为它手动调用了垃圾清理,这通常是令人不悦的,但是不幸的是有时似乎有必要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.