簡體   English   中英

Python-在不使用所有可用內存的情況下加載大量圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM