【发布时间】:2016-09-02 02:26:34
【问题描述】:
我有大约 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))
有没有更好的办法?
【问题讨论】:
-
JPEG 等图像类型是经过压缩的,因此当您打开它们时,它们会在内存中解压缩为全尺寸。您可能必须一次处理一个。
-
另外,如果原始图像是 8 位的,那么将它们转换为 32 位浮点数将使您的内存需求翻两番
-
如果您能解释在加载图像后您将如何处理这些图像,也许我们可以提供更多帮助。您可能不需要所有图像同时存在于内存中吗?
-
@Yasser,我不需要它们,同时我将调整大小然后裁剪然后保存。但问题是我需要它们的尺寸宽度和高度的平均值来标准化所有它们。
-
@Kevin 每个图像保存一个
(width, height)值的元组需要更少的 RAM,而不是整个图像数组...
标签: python image numpy python-imaging-library