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))

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM