目录

降低对比度

增加饱和度

降低饱和度

增加亮度

降低亮度

锐化

模糊处理

尺寸缩放

随机剪裁

变形处理

旋转处理

翻转处理

像素平移

添加噪声

随机透视

  •  增加对比度
import cv2
import numpy as np
import os


def modify_contrast(input_folder, output_folder, contrast_factor):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 修改对比度
            modified_image = modify_contrast_of_image(image, contrast_factor)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'recontrast_' + filename)
            cv2.imwrite(output_path, modified_image)

            print(f"Modified image saved: {output_path}")


def modify_contrast_of_image(image, contrast_factor):
    adjusted_image = np.int16(image)  # 将图像转换为int16类型,方便计算
    adjusted_image = adjusted_image * contrast_factor  # 修改对比度
    adjusted_image = np.clip(adjusted_image, 0, 255)  # 将像素值限制在0-255范围内
    adjusted_image = np.uint8(adjusted_image)  # 将图像转换回uint8类型
    return adjusted_image


# 输入文件夹路径

input_folder = ""

# 输出文件夹路径
output_folder = ""

# 对比度调整因子(大于1增加对比度,小于1减少对比度)
contrast_factor = 1.1

# 批量进行修改对比度处理并保存
modify_contrast(input_folder, output_folder, contrast_factor)
  • 降低对比度


import cv2
import numpy as np
import os


def modify_contrast(input_folder, output_folder, contrast_factor):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 修改对比度
            modified_image = modify_contrast_of_image(image, contrast_factor)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'recontrast_' + filename)
            cv2.imwrite(output_path, modified_image)

            print(f"Modified image saved: {output_path}")


def modify_contrast_of_image(image, contrast_factor):
    adjusted_image = np.int16(image)  # 将图像转换为int16类型,方便计算
    adjusted_image = adjusted_image * contrast_factor  # 修改对比度
    adjusted_image = np.clip(adjusted_image, 0, 255)  # 将像素值限制在0-255范围内
    adjusted_image = np.uint8(adjusted_image)  # 将图像转换回uint8类型
    return adjusted_image


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 对比度调整因子(大于1增加对比度,小于1减少对比度)
contrast_factor = 0.8

# 批量进行修改对比度处理并保存
modify_contrast(input_folder, output_folder, contrast_factor)
  • 增加饱和度


import cv2
import numpy as np
import os


def modify_saturation(input_folder, output_folder, saturation_factor):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 修改饱和度
            modified_image = modify_saturation_of_image(image, saturation_factor)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'resaturation_' + filename)
            cv2.imwrite(output_path, modified_image)

            print(f"Modified image saved: {output_path}")


def modify_saturation_of_image(image, saturation_factor):
    hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)  # 将图像转换为HSV颜色空间
    hsv_image[:, :, 1] = hsv_image[:, :, 1] * saturation_factor  # 修改饱和度
    modified_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)  # 将图像转换回BGR颜色空间
    return modified_image


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 饱和度调整因子 (0.0-1.0之间的值,值越大饱和度越高)
saturation_factor = 2

# 批量进行修改饱和度处理并保存
modify_saturation(input_folder, output_folder, saturation_factor)
  • 降低饱和度


import cv2
import numpy as np
import os


def modify_saturation(input_folder, output_folder, saturation_factor):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 修改饱和度
            modified_image = modify_saturation_of_image(image, saturation_factor)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'resaturation_' + filename)
            cv2.imwrite(output_path, modified_image)

            print(f"Modified image saved: {output_path}")


def modify_saturation_of_image(image, saturation_factor):
    hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)  # 将图像转换为HSV颜色空间
    hsv_image[:, :, 1] = hsv_image[:, :, 1] * saturation_factor  # 修改饱和度
    modified_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)  # 将图像转换回BGR颜色空间
    return modified_image


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 饱和度调整因子 (0.0-1.0之间的值,值越大饱和度越高)
saturation_factor = 0.5

# 批量进行修改饱和度处理并保存
modify_saturation(input_folder, output_folder, saturation_factor)
  • 增加亮度


import cv2
import os


def increase_brightness(input_folder, output_folder, brightness_factor):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 在RGB颜色空间中增加亮度
            adjusted_image = cv2.convertScaleAbs(image, alpha=brightness_factor, beta=0)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'change_brightness_' + filename)
            cv2.imwrite(output_path, adjusted_image)

            print(f'Adjusted image saved: {output_path}')


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 提亮因子
brightness_factor = 1.2

# 批量进行提亮处理并保存
increase_brightness(input_folder, output_folder, brightness_factor)
  • 降低亮度


import cv2
import os


def decrease_brightness(input_folder, output_folder, brightness_factor):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 在RGB颜色空间中减少亮度
            adjusted_image = cv2.convertScaleAbs(image, alpha=1/brightness_factor, beta=0)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'change_brightness_' + filename)
            cv2.imwrite(output_path, adjusted_image)

            print(f'Adjusted image saved: {output_path}')


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 变暗因子
brightness_factor = 1.7

# 批量进行变暗处理并保存
decrease_brightness(input_folder, output_folder, brightness_factor)
  • 锐化


import cv2
import numpy as np
import os


def random_sharpen(input_folder, output_folder, min_strength, max_strength):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 随机锐化处理
            modified_image = random_sharpen_image(image, min_strength, max_strength)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'sharpen_' + filename)
            cv2.imwrite(output_path, modified_image)

            print(f"Modified image saved: {output_path}")


def random_sharpen_image(image, min_strength, max_strength):
    # 随机生成锐化强度
    strength = np.random.uniform(min_strength, max_strength)

    # 创建锐化核
    kernel = np.array([[-1, -1, -1],
                       [-1, 9 + strength, -1],
                       [-1, -1, -1]])

    # 应用锐化核
    sharpened_image = cv2.filter2D(image, -1, kernel)

    return sharpened_image


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 锐化强度范围
min_strength = 0.01
max_strength = 0.03

# 批量进行随机锐化处理并保存
random_sharpen(input_folder, output_folder, min_strength, max_strength)
  • 模糊处理


import cv2
import os

def blur_images(input_folder, output_folder, kernel_size):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 模糊处理
            blurred_image = cv2.blur(image, (kernel_size, kernel_size))

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'blur_' + filename)
            cv2.imwrite(output_path, blurred_image)

            print(f"Blurred image saved: {output_path}")


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 模糊核大小,必须为奇数
kernel_size = 5

# 批量进行模糊处理并保存
blur_images(input_folder, output_folder, kernel_size)
  • 尺寸缩放



import cv2
import os

def resize_images(input_folder, output_folder, target_size):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

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

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'resize_' + filename)
            cv2.imwrite(output_path, resized_image)

            print(f'Resized image saved: {output_path}')

# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 目标尺寸
target_size = (1200, 200)

# 调整图像尺寸并保存
resize_images(input_folder, output_folder, target_size)


  • 随机剪裁


import cv2
import os
import random


def crop_images(input_folder, output_folder, crop_size):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 随机生成剪裁的起始坐标
            height, width, _ = image.shape
            start_x = random.randint(0, width - crop_size)
            start_y = random.randint(0, height - crop_size)

            # 剪裁图像
            cropped_image = image[start_y:start_y + crop_size, start_x:start_x + crop_size]

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'retailor_' + filename)
            cv2.imwrite(output_path, cropped_image)

            print(f'Cropped image saved: {output_path}')


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 剪裁尺寸
crop_size = 256

# 批量剪裁图像并保存
crop_images(input_folder, output_folder, crop_size)
  • 变形处理


import cv2
import os
import numpy as np


def transform_images(input_folder, output_folder, transform_matrix):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 进行变形处理
            transformed_image = cv2.warpAffine(image, transform_matrix, (image.shape[1], image.shape[0]))

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'deform_' + filename)
            cv2.imwrite(output_path, transformed_image)

            print(f'Transformed image saved: {output_path}')


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 定义仿射变换矩阵
# 这里以水平翻转为例
transform_matrix = np.array([[-1, 0, 0],
                             [0, 1, 0]], dtype=np.float32)

# 批量进行变形处理并保存
transform_images(input_folder, output_folder, transform_matrix)
  • 旋转处理


import cv2
import os
import math


def rotate_images(input_folder, output_folder, angle):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 获取图像的中心点坐标
            height, width = image.shape[:2]
            center = (width // 2, height // 2)

            # 定义旋转矩阵
            matrix = cv2.getRotationMatrix2D(center, angle, 1.0)

            # 进行旋转操作
            rotated_image = cv2.warpAffine(image, matrix, (width, height))

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'rotation_' + filename)
            cv2.imwrite(output_path, rotated_image)

            print(f'Rotated image saved: {output_path}')


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 旋转角度(单位:度)
angle = 45

# 批量旋转图像并保存
rotate_images(input_folder, output_folder, angle)
  • 翻转处理


import cv2
import os


def flip_images(input_folder, output_folder, flip_code):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 进行翻转操作
            flipped_image = cv2.flip(image, flip_code)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'resupination_' + filename)
            cv2.imwrite(output_path, flipped_image)

            print(f'Flipped image saved: {output_path}')


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 翻转方式:
# 0:水平翻转,大约沿y轴旋转180度
# 1:垂直翻转,大约沿x轴旋转180度
# -1:同时进行水平和垂直翻转,大约沿x和y轴旋转180度
flip_code = -1

# 批量翻转图像并保存
flip_images(input_folder, output_folder, flip_code)
  • 像素平移


import cv2
import os
import numpy as np

def shift_pixels(input_folder, output_folder, shift_x, shift_y):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 平移图像
            M = np.float32([[1, 0, shift_x], [0, 1, shift_y]])
            shifted_image = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'shift_' + filename)
            cv2.imwrite(output_path, shifted_image)

            print(f'Shifted image saved: {output_path}')


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 像素平移量
shift_x = 130
shift_y = 100

# 批量进行像素平移处理并保存
shift_pixels(input_folder, output_folder, shift_x, shift_y)
  • 添加噪声


import cv2
import numpy as np
import os


def add_noise(input_folder, output_folder, noise_type, intensity):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 添加噪声
            noisy_image = add_noise_to_image(image, noise_type, intensity)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'noise_' + filename)
            cv2.imwrite(output_path, noisy_image)

            print(f"Noisy image saved: {output_path}")


def add_noise_to_image(image, noise_type, intensity):
    if noise_type == 'gaussian':
        noisy_image = add_gaussian_noise(image, intensity)
    elif noise_type == 'salt_and_pepper':
        noisy_image = add_salt_and_pepper_noise(image, intensity)
    else:
        raise ValueError("Invalid noise type. Supported noise types: 'gaussian', 'salt_and_pepper'")

    return noisy_image


def add_gaussian_noise(image, intensity):
    row, col, ch = image.shape
    mean = 0
    std_dev = intensity
    gauss = np.random.normal(mean, std_dev, (row, col, ch))
    gauss = gauss.reshape(row, col, ch)
    noisy_image = image + gauss
    noisy_image = np.clip(noisy_image, 0, 255).astype(np.uint8)
    return noisy_image


def add_salt_and_pepper_noise(image, intensity):
    row, col, ch = image.shape
    noisy_image = np.copy(image)
    salt_pepper_pixels = np.random.rand(row, col) < intensity / 2
    salt_pixels = salt_pepper_pixels & (np.random.rand(row, col) < 0.5)
    pepper_pixels = salt_pepper_pixels & ~salt_pixels
    noisy_image[salt_pixels, :] = 255
    noisy_image[pepper_pixels, :] = 0
    return noisy_image


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 噪声类型: 'gaussian'(高斯噪声) 或 'salt_and_pepper'(椒盐噪声)
noise_type = "gaussian"

# 噪声强度
intensity = 1

# 批量进行添加噪声处理并保存
add_noise(input_folder, output_folder, noise_type, intensity)
  • 随机透视


import cv2
import numpy as np
import os


def random_perspective(input_folder, output_folder, max_distortion):
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)

    # 遍历输入文件夹中的所有图像文件
    for filename in os.listdir(input_folder):
        if filename.endswith(('.jpg', '.jpeg', '.png')):
            # 读取图像
            image_path = os.path.join(input_folder, filename)
            image = cv2.imread(image_path)

            # 随机透视处理
            modified_image = random_perspective_transform(image, max_distortion)

            # 写入输出文件夹
            output_path = os.path.join(output_folder, 'perspective_' + filename)
            cv2.imwrite(output_path, modified_image)

            print(f"Modified image saved: {output_path}")


def random_perspective_transform(image, max_distortion):
    # 随机生成透视变换的四个角点
    height, width = image.shape[:2]
    x1 = np.random.randint(0, width // max_distortion)
    y1 = np.random.randint(0, height // max_distortion)
    x2 = np.random.randint(width - width // max_distortion, width)
    y2 = np.random.randint(0, height // max_distortion)
    x3 = np.random.randint(width - width // max_distortion, width)
    y3 = np.random.randint(height - height // max_distortion, height)
    x4 = np.random.randint(0, width // max_distortion)
    y4 = np.random.randint(height - height // max_distortion, height)

    # 定义原始图像四个角点
    src_points = np.array([(0, 0), (width, 0), (width, height), (0, height)], dtype=np.float32)
    # 定义透视变换后的四个角点
    dst_points = np.array([(x1, y1), (x2, y2), (x3, y3), (x4, y4)], dtype=np.float32)

    # 计算透视变换矩阵
    M = cv2.getPerspectiveTransform(src_points, dst_points)

    # 进行透视变换
    transformed_image = cv2.warpPerspective(image, M, (width, height))

    return transformed_image


# 输入文件夹路径
input_folder = ""

# 输出文件夹路径
output_folder = ""

# 最大透视畸变程度
max_distortion = 4

# 批量进行随机透视处理并保存
random_perspective(input_folder, output_folder, max_distortion)

Logo

更多推荐