【相關(guān)學(xué)習(xí)推薦:python教程】
前言
在我對(duì)項(xiàng)目組的一些訓(xùn)練圖像進(jìn)行預(yù)處理的時(shí)候,發(fā)現(xiàn)處理的圖像是分好了類(lèi),在文件夾里的文件夾里,套娃式存儲(chǔ)的,所以對(duì)我批處理,以及按原文件夾規(guī)則進(jìn)行存儲(chǔ)的時(shí)候,就會(huì)造成很大困擾
但通過(guò)下面幾個(gè)函數(shù)的結(jié)合,幫我順利的完成了一系列的預(yù)處理。
一、用不膩的芷山庫(kù)
1.安裝庫(kù)
pip安裝:
pip install zisan2.getfiles函數(shù)
函數(shù)調(diào)用:
import zisan.filetools as zffile_path = 'c:/users/xxx/desktop/2016/annotations'whole_file = zf.getfiles(file_path)圖片存儲(chǔ)在 :件夾2016 -> 文件夾annotations ->子文件夾 -> 00000.png
通過(guò)getfiles函數(shù),可以將annotations中的所有文件夾里的所有圖片路徑調(diào)出來(lái)
也就是說(shuō),getfiles函數(shù)是將文件夾里面的所有文件路徑調(diào)出來(lái),不管中間有無(wú)子文件夾
二、其他函數(shù)
1.os.listdir函數(shù)
該函數(shù)調(diào)用后會(huì)返回路徑底下文件夾的名稱,以字符串的形式儲(chǔ)存在列表里
代碼如下:
import osfile_path = 'c:/users/xxx/desktop/2016/annotations'file_names = os.listdir(file_path)print(file_names)效果:
import osnew_file_path = 'c:/users/xxx/destop/2016/newfile'os.mkdir(new_file_path)用于創(chuàng)建新文件夾
三、運(yùn)用
要求:處理annotations文件夾中的每個(gè)子文件夾中的圖片,并按原本的規(guī)則存儲(chǔ)在newfile新文件夾里的相應(yīng)位置,命名規(guī)則如00000.jpg
import zisan.filetools as zfimport osimport cv2from skimage import iofile_path = 'c:/users/xxx/desktop/2016/annotations'new_file_path = 'c:/users/xxx/destop/2016/newfile'file_names = os.listdir(file_path)#獲取annotations文件夾的子文件夾名稱for i in file_names: #遍歷每個(gè)子文件夾名稱 index = 0 file_name = file_path '/' i #巧妙運(yùn)用 號(hào)得到改子文件夾的路徑 os.mkdir(new_file_path '/' i) #在newfile里創(chuàng)建一個(gè)與子文件夾名稱相同的文件夾 whole_pic = zf.getfiles(file_name) #用getfiles函數(shù)讀取子文件夾內(nèi)的圖片路徑 for f in whole_pic: msk = io.imread(f) msk=cv2.cvtcolor(msk,cv2.color_rgba2gray) msk[np.where(msk!=0)]=255 io.imsave(new_file_path '/' i '/' str("d" % index) '.jpg' , msk) #處理命名可直接 '.jpg'讓其以jepg形式存儲(chǔ) index = 1這就是我解決文件夾處理問(wèn)題的基本思路和流程,各個(gè)函數(shù)可以搭配使用,放入循環(huán)外或內(nèi)根據(jù)具體要求都有著不同的效果。