图片数据增强-resize(不同插值)、各种模糊

将图片批量进行不同的数据增强处理,并保存到不同的文件夹下。

各种不同的模糊处理

import os
import cv2


def apply_blur_to_images(input_folder_path, output_folder_path):
    # 遍历文件夹下的所有文件
    for filename in os.listdir(input_folder_path):
        # 检查文件类型是否为图片
        if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
            # 构建输入图片的完整路径
            input_image_path = os.path.join(input_folder_path, filename)

            # 读取图片
            image = cv2.imread(input_image_path)

            # 根据不同的模糊方法进行处理
            for blur_method in ['gaussian', 'mean', 'median', 'bilateral']:
                # 创建对应的模糊文件夹
                output_blur_folder_path = os.path.join(output_folder_path, blur_method)
                os.makedirs(output_blur_folder_path, exist_ok=True)

                # 根据选择的模糊方法进行处理
                if blur_method == 'mean':
                    blurred_image = cv2.blur(image, (15, 15))
                elif blur_method == 'median':
                    blurred_image = cv2.medianBlur(image, 15)
                elif blur_method == 'bilateral':
                    blurred_image = cv2.bilateralFilter(image, 15, 75, 75)
                else:
                    blurred_image = cv2.GaussianBlur(image, (15, 15), 0)

                # 构建输出图片的完整路径
                output_image_path = os.path.join(output_blur_folder_path, filename)

                # 保存模糊处理后的图片
                cv2.imwrite(output_image_path, blurred_image)


if __name__ == '__main__':
    # 文件夹不要有中文!!!!!!!!!
    # 输入文件夹路径
    input_folder_path = './data'
    # 输出文件夹路径
    output_folder_path = './output'

    # 调用函数
    apply_blur_to_images(input_folder_path, output_folder_path)

resize 下采样

import os
import cv2


def reduce_resolution(input_folder_path, output_folder_path, scale_factor, interpolation):
    # 遍历文件夹下的所有文件
    for filename in os.listdir(input_folder_path):
        # 检查文件类型是否为图片
        if filename.endswith('.jpg') or filename.endswith('.jpeg') or filename.endswith('.png'):
            # 构建输入图片的完整路径
            input_image_path = os.path.join(input_folder_path, filename)

            # 读取图片
            image = cv2.imread(input_image_path)

            # 计算目标宽度和高度
            target_width = int(image.shape[1] * scale_factor)
            target_height = int(image.shape[0] * scale_factor)

            # 调整图像尺寸
            resized_image = cv2.resize(image, (target_width, target_height), interpolation=interpolation)

            # 构建输出图片的完整路径
            interpolation_name = get_interpolation_name(interpolation)
            output_folder = os.path.join(output_folder_path, interpolation_name)
            os.makedirs(output_folder, exist_ok=True)  # 创建输出文件夹(如果不存在)
            output_image_path = os.path.join(output_folder, filename)

            # 保存调整尺寸后的图片
            cv2.imwrite(output_image_path, resized_image)


def get_interpolation_name(interpolation):
    if interpolation == cv2.INTER_NEAREST:
        return 'INTER_NEAREST'
    elif interpolation == cv2.INTER_LINEAR:
        return 'INTER_LINEAR'
    elif interpolation == cv2.INTER_CUBIC:
        return 'INTER_CUBIC'
    elif interpolation == cv2.INTER_LANCZOS4:
        return 'INTER_LANCZOS4'
    else:
        return 'UNKNOWN'


if __name__ == '__main__':
    # 文件夹不要有中文!!!!!!!!!
    # 输入文件夹路径
    input_folder_path = './data'
    # 输出文件夹路径
    output_folder_path = './output'

    # 比例系数
    scale_factor = 0.5  # 调整为原始图像的一半

    # 插值方法列表
    interpolations = [cv2.INTER_NEAREST, cv2.INTER_LINEAR, cv2.INTER_CUBIC, cv2.INTER_LANCZOS4]

    # 遍历插值方法
    for interpolation in interpolations:
        # 调用函数进行图像尺寸调整
        reduce_resolution(input_folder_path, output_folder_path, scale_factor, interpolation)

遍历文件夹,结果以名字命令,方便区分
在这里插入图片描述

### 数据增强的方法概述 `torchvision.transforms` 是 PyTorch 中用于图像数据增强的核心模块之一。它提供了丰富的功能来对输入数据进行变换,从而提高模型的泛化能力并减少过拟合的风险。 #### 基本概念 数据增强是指通过对原始数据集中的样本应用一系列转换操作,生成新的训练样本来扩展数据集的技术。这些转换可以包括几何变换(如旋转、翻转)、颜色调整(如亮度、对比度变化)以及其他形式的变化。 --- ### 使用 `transforms` 进行数据增强的具体方法 以下是几种常见的数据增强方式及其对应的实现: #### 1. 随机水平或垂直翻转 随机水平或垂直翻转是一种简单而有效的方式,能够增加数据集中不同方向上的多样性。 ```python import torchvision.transforms as transforms transform_horizontal_flip = transforms.RandomHorizontalFlip(p=0.5) # 水平翻转概率为0.5 transform_vertical_flip = transforms.transforms.RandomVerticalFlip(p=0.5) # 垂直翻转概率为0.5 ``` 上述代码实现了分别以一定概率执行水平和垂直翻转的操作[^1]。 #### 2. 随机裁剪与缩放 随机裁剪允许从原图中提取固定大小的部分区域,并对其进行进一步处理,比如重新缩放到统一尺寸。 ```python random_crop_transform = transforms.Compose([ transforms.RandomResizedCrop(256, scale=(0.5, 1.0), ratio=(3/4, 4/3)), ]) ``` 此部分展示了如何定义一个组合式的变换链表,其中包含了随机裁剪到特定分辨率的功能[^2]。 #### 3. 自定义复合变换 当需要更复杂的逻辑时,可以通过创建自定义类封装多个连续步骤。 ```python class CustomTransforms(object): def __init__(self, transformations_list): self.transformations = transformations_list def __call__(self, image): for transformation in self.transformations: image = transformation(image) return image ``` 这里提供了一个模板化的解决方案,使得开发者可以根据需求灵活添加任意数量的不同类型的转换函数[^3]。 #### 4. 多视角切割 (FiveCrop 和 TenCrop) 这两种技术主要用于评估阶段,在测试图片上截取五个或者十个不同的子窗口作为预测依据。 ```python five_crops = transforms.FiveCrop((size)) # 返回四个角加中间位置共五张切片 ten_crops = transforms.TenCrop((size), vertical_flip=True) # 同理但多了上下颠倒版本 ``` 这段脚本解释了怎样利用官方库里的工具快速获取多角度观察结果[^4]。 #### 5. 调整图像大小 为了匹配网络输入层的要求,通常还需要改变每幅照片的实际物理维度。 ```python resize_operation = transforms.Resize(new_size, interpolation=Image.BILINEAR) ``` 在这里我们指定了目标高度宽度以及采用何种算法完成这一过程——例如最常使用的双线性插值法就是默认选项[^5]。 --- ### 总结说明 以上列举了几种典型的基于 `torchvision.transforms` 的数据增强手段。实际项目里可能还会涉及到更多高级特性,比如噪声注入、模糊效果模拟等等。合理运用它们可以帮助构建更加健壮的人工智能系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值