You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:15:41