用python(PIL庫)影象預處理
阿新 • • 發佈:2019-01-14
由於最近做一些影象處理有關的學習任務,需要對圖片進行預處理,對準格式(統一尺寸,轉換通道數,重新命名)。在這個過程中遇到了好多問題,查找了一些資料,最終解決了這些問題;
廢話不多說,直接上程式碼(新手,註釋有點多):
"這裡對影象的預處理包括:同一名稱,統一尺寸,統一通道數;" from PIL import Image import os def rename_image(file_dir, name): '''將網上爬下來的圖片重新命名(更好的觀看)''' '''第一個引數是目標檔名; 第二個引數是圖片的名稱''' i = 0 print("正在重新命名圖片。。。。。。。") for file in os.listdir(file_dir): '''獲取該路徑檔案下的所有圖片''' src = os.path.join(os.path.abspath(file_dir), file) '''修改後圖片的儲存位置(目標資料夾+新的圖片的名稱)''' dst = os.path.join(os.path.abspath(file_dir), name + str(i) + '.png') os.rename(src, dst) # 將圖片重新命名 i = i + 1 print("-----------重新命名完畢-----------") def process_image_channels(image_path): #將4通道,A通道的統一成三通道的影象; # process the 4 channels .png print("正在轉換圖片通道數。。。。。。。") for img_name in os.listdir(image_path): img_path = image_path + "/" + img_name # 獲取該圖片全稱 image = Image.open(img_path) # 開啟特定一張圖片 image = image.resize((64, 64)) # 設定需要轉換的圖片大小 if image.mode == 'RGBA': r, g, b, a = image.split() image = Image.merge("RGB", (r, g, b)) os.remove(img_path) # 用新生成的3通道的圖片代替原來的; image.save(img_path) #print("這是個四通道的,處理完了!") # process the 1 channel image elif image.mode != 'RGB': image = image.convert("RGBA") r, g, b, a = image.split() image = Image.merge("RGB", (r, g, b)) os.remove(img_path) image.save(img_path) #print("這是個A通道的,處理完了!") print("-----------通道數變換完畢-----------") # size輸入形式舉例(記得加括號): (64, 64) def image_reshape(image_path, size): print("正在統一圖片尺寸。。。。。。。") for img_name in os.listdir(image_path): img_path = image_path + "/" + img_name # 獲取該圖片全稱 image = Image.open(img_path) # 開啟特定一張圖片 image = image.resize(size) # 設定需要轉換的圖片大小 os.remove(img_path) image.save(img_path) print("-----------尺寸統一完畢-----------") if __name__ == '__main__': image_path = "icon" print("ready for process ---------- ") # 重新命名; rename_image(image_path, 'icon_') # 統一通道數; process_image_channels(image_path) # 統一尺寸; image_reshape(image_path, (64, 64))
在這個程式碼裡面,我定義了三個函式,分別用來做名稱,尺寸,通道;
中間遇到的問題有以下幾個:
1.在迴圈資料夾的時候,會出現不能識別Thumbs.db檔案的錯誤,這個需要把這個檔案刪除掉才行,這個是系統自己生成的檔案,不是圖片,會使程式碼報錯,百度一下刪除這個問價的方法(這個東西賊煩,我弄了好長時間);
這是我解決的方法:https://blog.csdn.net/weixin_41765699/article/details/82620542,
2.有時候會出現不是圖片的檔案,也是報錯不能識別這個檔案,也給他刪除掉;