版權聲明:本文為博主原創文章,歡迎轉載,並請注明出處。聯系方式:460356155@qq.com
Keras在生成訓練和驗證數據時,有2種方式:從內存加載、從硬盤加載,即ImageDataGenerator的flow和flow_from_directory函數。
其中flow_from_directory方式,Keras通過PIL讀取圖像文件,讀到的數據是RGB順序的。
而flow方式,由用戶讀取圖像文件,加載到內存,如果此時用戶用OpenCV的方式讀取文件,則數據是BGR順序的。
因此,需注意圖像數據格式的一致性。
如果訓練通過flow_from_directory讀取,判斷圖片時通過OpenCV讀取,則會出現紊亂,結果會差別較大。
在訓練和圖片識別采用的包不同導致圖像數據格式不一致時,要做RGB、BGR順序的轉換:
1、統一用BGR順序:在ImageDataGenerator中傳入preprocessing_function,把RGB的轉換為BGR
def img_rgb2bgr(img): return img[: , : , : : -1]
2、統一用RGB順序:在OpenCV讀取圖像文件時,把BGR的轉換為RGB
import cv2 from PIL import Image img = cv2.imread("plane.jpg") image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))