Keras训练加载图片方式:PIL,RGB vs OpenCV

版权声明:本文为博主原创文章,欢迎转载,并请注明出处。联系方式: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))