批量讀取資料夾下的圖片並儲存在一個四維陣列中
阿新 • • 發佈:2018-12-22
在深度學習開發中,我們在網上找的現成的資料集,都是已經處理好了的,我們直接使用即可。但是如果我們想用自己的圖片訓練網路,會發現編譯器總是報讀入圖片的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)
現在,我們就可以拿任何的圖片來建立自己的訓練資料,然後來訓練網路了。