Keras训练加载图片方式:PIL(RGB) vs OpenCV(BGR)
版权声明:本文为博主原创文章,欢迎转载,并请注明出处。联系方式: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))