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

Keras中ImageDataGenerator加载文件夹图片及数据增强问题咨询

解决Keras加载整个文件夹图片并应用数据增强的问题

嘿,我来帮你搞定这个问题!你说得对,load_img本身就是用来加载单张图片的工具,要批量处理文件夹里的10张图片并应用数据增强,Keras有两种非常实用的方案,我给你详细拆解一下:

方案一:用flow_from_directory(推荐,最便捷)

这个方法是Keras专门为批量处理文件夹图片设计的,它会自动遍历指定文件夹下的所有图片,同时应用你定义的数据增强规则。

假设你的图片文件夹结构是这样的(即使只有一类图片,也建议套一层子文件夹,符合Keras的预期格式):

your_image_folder/
    all_images/
        img1.jpg
        img2.jpg
        ...
        img10.jpg

修改后的代码如下:

from keras.preprocessing.image import ImageDataGenerator

# 定义数据增强参数,和你之前的设置一致
datagen = ImageDataGenerator(
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest'
)

# 从文件夹批量加载图片并应用增强
# target_size:统一图片尺寸,根据你的需求调整
# batch_size:每次生成多少张增强后的图片
# class_mode:因为只有一类图片,设为'input'或者'None'
generator = datagen.flow_from_directory(
    'your_image_folder',  # 父文件夹路径
    target_size=(150, 150),
    batch_size=10,
    class_mode='input'  # 如果不需要分类标签,用这个;如果是多分类用'categorical'
)

# 如果你想把增强后的图片保存下来,可以这样做
# 生成20张增强后的图片(你可以按需调整数量)
for i in range(20):
    # 获取一批增强后的图片
    batch = generator.next()
    # 遍历这批图片并保存
    for j in range(batch[0].shape[0]):
        img = array_to_img(batch[0][j])
        img.save(f'augmented_img_{i}_{j}.jpg')

方案二:手动遍历文件夹加载图片,再用flow方法

如果你需要更灵活地处理图片(比如加载前先做自定义预处理),可以手动遍历文件夹加载所有图片,再传入datagen.flow来应用增强:

import os
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
import numpy as np

datagen = ImageDataGenerator(
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True,
    fill_mode='nearest'
)

# 存储所有图片的数组
images = []
img_dir = 'your_image_folder/all_images'  # 直接指向图片所在文件夹

# 遍历文件夹里的所有图片
for img_name in os.listdir(img_dir):
    if img_name.endswith('.jpg') or img_name.endswith('.png'):  # 过滤图片文件
        img_path = os.path.join(img_dir, img_name)
        img = load_img(img_path, target_size=(150, 150))  # 加载单张图片并统一尺寸
        x = img_to_array(img)  # 转成数组
        x = x.reshape((1,) + x.shape)  # 增加一个维度,变成(1, height, width, channels)
        images.append(x)

# 把所有图片数组合并成一个大数组
images_array = np.vstack(images)

# 生成增强图片的生成器
generator = datagen.flow(
    images_array,
    batch_size=10,
    save_to_dir='augmented_images',  # 可选:保存增强后的图片到这个文件夹
    save_prefix='aug',
    save_format='jpg'
)

# 生成增强图片,比如生成5批(每批10张,总共50张)
for _ in range(5):
    generator.next()

关键说明

  • flow_from_directory不需要你手动遍历文件夹,Keras会自动处理,适合大多数场景;
  • 两种方案都能批量应用你定义的所有数据增强规则(旋转、平移、翻转等);
  • 如果你是为训练模型准备数据,直接把生成器传入model.fit()就可以,不用手动保存图片。

内容的提问来源于stack exchange,提问作者user2975921

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:32:57