使用Keras ImageDataGenerator增强图像后颜色偏蓝负片的技术求助
解决Keras ImageDataGenerator图像增强后颜色异常的问题
问题原因
你遇到的颜色偏蓝负片效果,核心原因是图像通道顺序不匹配:
- OpenCV的
cv2.imread()默认以BGR通道顺序读取图像 - Keras的
img_to_array()和ImageDataGenerator处理图像时,默认遵循RGB通道顺序
两者通道顺序颠倒,就会导致颜色显示异常。
另外你的代码存在逻辑错误:读取第一张图像并打印信息后,你用break终止了循环,导致后续的图像增强生成代码(for batch in train_datagen.flow(...))根本不会执行,需要移除这个break才能正常生成增强图像。
解决方法
方法1:转换OpenCV读取图像的通道顺序
在读取图像后,将BGR格式转换为RGB格式:
train_datagen = ImageDataGenerator( rotation_range = 10, shear_range = 0.15, zoom_range = 0.15, horizontal_flip = True, brightness_range=[0.5,1.5]) train_batch_size = 32 val_batch_size = 32 import warnings warnings.filterwarnings('ignore') for img in imgs: img = cv2.imread(train_path+'real'+"\\"+img) # 关键:将BGR转换为RGB通道顺序 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) x = img_to_array(img) x = x.reshape((1,) + x.shape) i = 0 for batch in train_datagen.flow(x, batch_size=1, save_to_dir=r'C:\Users\Shashwat Goyal\Desktop\augment', save_prefix='people2', save_format='jpg'): i += 1 if i > 4: break
方法2:改用PIL库读取图像(默认RGB顺序)
PIL库读取图像时默认使用RGB通道顺序,无需额外转换:
from PIL import Image import numpy as np from keras.preprocessing.image import img_to_array, ImageDataGenerator train_datagen = ImageDataGenerator( rotation_range = 10, shear_range = 0.15, zoom_range = 0.15, horizontal_flip = True, brightness_range=[0.5,1.5]) train_batch_size = 32 val_batch_size = 32 import warnings warnings.filterwarnings('ignore') for img in imgs: # 用PIL读取图像,默认RGB顺序 img = Image.open(train_path+'real'+"\\"+img) x = img_to_array(img) x = x.reshape((1,) + x.shape) i = 0 for batch in train_datagen.flow(x, batch_size=1, save_to_dir=r'C:\Users\Shashwat Goyal\Desktop\augment', save_prefix='people2', save_format='jpg'): i += 1 if i > 4: break
内容的提问来源于stack exchange,提问作者warlock
相关产品推荐
相关产品推荐

