Pillow & ImageDataGenerator

本文比较了Python库Pillow和深度学习框架中的ImageDataGenerator在图像处理和数据增强上的应用。Pillow适合基本的离线图像处理,而ImageDataGenerator则专为深度学习中的数据增强设计,提供在线动态增强功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pillow和ImageDataGenerator是两个不同的工具,用于处理图像数据,它们有一些区别:

  1. Pillow:

    • Pillow是一个Python图像处理库,它提供了各种功能,包括图像打开、保存、剪裁、缩放、旋转、颜色调整等。
    • Pillow通常用于离线图像处理,你可以编写Python脚本来加载、修改和保存图像。
    • Pillow不是专门设计用于数据增强,但可以用来执行一系列的图像处理操作,以生成多个变换后的图像。

以下代码是Pillow库的一小部分功能示例:

# 确保你已经安装了Pillow库 —— pip install Pillow

# 1、打开和显示图像
from PIL import Image、

image = Image.open("path_to_image.jpg")
image.show()

# 2、保存图像
image.save("output_image.jpg")

# 3、调整图像大小
new_size = (width, height)
resized_image = image.resize(new_size)
resized_image.save("resized_image.jpg")

# 4、旋转图像(角度为逆时针旋转)
rotated_image = image.rotate(90)  # 旋转90度
rotated_image.save("rotated_image.jpg")

# 5、裁剪图像(指定左上角和右下角坐标)
box = (left, upper, right, lower)
cropped_image = image.crop(box)
cropped_image.save("cropped_image.jpg")

# 6、调整图像颜色
from PIL import ImageEnhance
# 调整亮度
enhancer = ImageEnhance.Brightness(image)
brightened_image = enhancer.enhance(1.5)  # 1.5倍亮度
brightened_image.save("brightened_image.jpg")
# 调整对比度
enhancer = ImageEnhance.Contrast(image)
contrasted_image = enhancer.enhance(1.5)  # 1.5倍对比度
contrasted_image.save("contrasted_image.jpg")
  1. ImageDataGenerator (通常与深度学习框架结合使用,如Keras):

    • ImageDataGenerator是深度学习框架(如Keras)提供的一个图像数据生成器,专门用于数据增强。
    • 它允许你以在线方式(在训练期间)对训练图像进行各种数据增强操作,如随机旋转、翻转、缩放、平移、亮度调整等。
    • ImageDataGenerator通常与深度学习模型一起使用,可以在每个训练迭代中动态生成增强的图像,以增加训练数据的多样性。

以下代码将生成20个经过数据增强的图像,并保存在文件中。你可以根据需要调整参数和增强选项,以满足你的具体需求:

from tensorflow.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'       # 生成新像素的填充方式
)

# 可以使用.flow()方法来生成数据批次
from tensorflow.keras.preprocessing.image import load_img, img_to_array, array_to_img

# 读取一张图像
img = load_img('path_to_image.jpg')
x = img_to_array(img)
x = x.reshape((1,) + x.shape)

# 生成增强后的图像批次
i = 0
for batch in datagen.flow(x, batch_size=1):
    augmented_image = array_to_img(batch[0])
    augmented_image.save(f'augmented_image_{i}.jpg')
    i += 1
    if i >= 20:  # 生成20个增强图像
        break

总结来说,Pillow是一个通用的图像处理库,而ImageDataGenerator是用于深度学习中数据增强的特定工具。如果你正在进行深度学习任务,ImageDataGenerator 通常更方便,因为它可以直接与深度学习框架集成,动态生成增强的图像。如果你只需要简单的图像处理,Pillow可能更适合。

 

``` import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 定义路径 train_dir = r'C:\Users\29930\Desktop\结构参数图' # 数据增强配置 train_datagen = ImageDataGenerator( rescale=1./255, validation_split=0.2, rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True ) # 生成训练集和验证集 train_generator = train_datagen.flow_from_directory( train_dir, target_size=(224, 224), batch_size=32, class_mode='binary', subset='training' ) val_generator = train_datagen.flow_from_directory( train_dir, target_size=(224, 224), batch_size=32, class_mode='binary', subset='validation' ) model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(224,224,3)), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(1, activation='sigmoid') ]) model.compile( optimizer='adam', loss='binary_crossentropy', metrics=['accuracy', tf.keras.metrics.AUC(name='auc')] ) # 添加早停法 early_stop = tf.keras.callbacks.EarlyStopping( monitor='val_loss', patience=5, restore_best_weights=True ) # 训练模型 history = model.fit( train_generator, validation_data=val_generator, epochs=30, callbacks=[early_stop] ) # 保存模型 model.save('copd_cnn_model.h5') # 评估指标可视化 import matplotlib.pyplot as plt plt.plot(history.history['auc'], label='Training AUC') plt.plot(history.history['val_auc'], label='Validation AUC') plt.title('模型AUC曲线') plt.ylabel('AUC值') plt.xlabel('Epoch') plt.legend() plt.show()```运行结果是Found 213 images belonging to 2 classes. Found 52 images belonging to 2 classes. Warning (from warnings module): File "C:\Users\29930\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\layers\convolutional\base_conv.py", line 107 super().__init__(activity_regularizer=activity_regularizer, **kwargs) UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead. Warning (from warnings module): File "C:\Users\29930\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\trainers\data_adapters\py_dataset_adapter.py", line 121 self._warn_if_super_not_called() UserWarning: Your `PyDataset` class should call `super().__init__(**kwargs)` in its constructor. `**kwargs` can include `workers`, `use_multiprocessing`, `max_queue_size`. Do not pass these arguments to `fit()`, as they will be ignored. Traceback (most recent call last): File "D:/建模/cnn.py", line 61, in <module> history = model.fit( File "C:\Users\29930\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\utils\traceback_utils.py", line 122, in error_handler raise e.with_traceback(filtered_tb) from None File "C:\Users\29930\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\utils\image_utils.py", line 227, in load_img raise ImportError( ImportError: Could not import PIL.Image. The use of `load_img` requires PIL. 请根据结果修改代码使其能正常运行
最新发布
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值