1. 程式人生 > >批量讀取資料夾下的圖片並儲存在一個四維陣列中

批量讀取資料夾下的圖片並儲存在一個四維陣列中

在深度學習開發中,我們在網上找的現成的資料集,都是已經處理好了的,我們直接使用即可。但是如果我們想用自己的圖片訓練網路,會發現編譯器總是報讀入圖片的shape大小不一致的情況。

在用來訓練的圖片陣列中,一般都是四維的,比如(600,299,299,3),600表示在這個陣列中一共有600張圖片,299則是圖片的寬高,3表示圖片是彩色的。現在,我們來把自己資料夾下的所有的圖片都讀到一個數組中,並擁有類似的shape。

 

import numpy
import os
from PIL import Image   #匯入Image模組
from pylab import *     #匯入savetxt模組

def get_imlist(path):   #此函式讀取特定資料夾下的jpg格式影象,返回圖片所在路徑的列表

    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]

c=get_imlist(r"D:\BaiduNetdiskDownload\train_3")    #r""是防止字串轉譯
print (c)     #這裡以list形式輸出jpg格式的所有影象(帶路徑)
d=len(c)    #這可以以輸出影象個數,如果你的資料夾下有698張圖片,那麼d為698
print("圖片個數:",d)


data=numpy.empty((d,299,299,3)) #建立d*(299,299,3)的矩陣
while d>0:
    img=Image.open(c[d-1])  #開啟影象

    #img_ndarray=numpy.asarray(img)
    img_ndarray=numpy.asarray(img,dtype='float64')/255  #將影象轉化為陣列並將畫素轉化到0-1之間
    print(img_ndarray.shape)
    data[d-1]=img_ndarray    #將影象的矩陣形式儲存到data中
    d=d-1
print ("data.shape:",data.shape)

 

現在,我們就可以拿任何的圖片來建立自己的訓練資料,然後來訓練網路了。