Python图像增强

本文介绍了使用Python的PIL库和OpenCV对图像进行数据增强的方法,包括对比度、亮度和颜色增强,以及添加高斯噪声和运动模糊处理。通过调整参数实现不同程度的增强和处理,以提升图像处理的效果和模型训练的多样性。

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

本文使用5种方法对原始数据做数据增强,分别是对比度增强、亮度增强、颜色增强、添加高斯噪声、运动模糊处理

对比度增强

对图片进行对比度增强,下述代码输出三张图片,分别是不增强、增强0.5倍、增强1.5倍的效果

from PIL import Image
from PIL import ImageEnhance
import os

'''
函 数 名:contrastEnhancement(root_path, img_name, contrast)
函数功能:对比度增强
入口参数:
        root_path :图片根目录
        img_name :图片名称
        contrast :对比度
返 回 值:
        对比度增强后的图片
'''


def contrastEnhancement(root_path, img_name, contrast):
    image = Image.open(os.path.join(root_path, img_name))
    enh_con = ImageEnhance.Contrast(image)
    image_contrasted = enh_con.enhance(contrast)
    return image_contrasted


Input_dir = r"D:\image_test\original"  # 要改变的图片的路径文件夹
Output_dir = r"D:\image_test\contrastEnhancement"  # 要保存的图片的路径文件夹

for name in os.listdir(Input_dir):
    saveName = name[:-4] + "original.png"
    image = Image.open(os.path.join(Input_dir, name))
    image.save(os.path.join(Output_dir, saveName))  # 保存原图

    ########################对比度增强#######################
    for i in range(5, 16, 10):  # range()的传入参数只能是int类型,使用i与i_int做转换
        i_int = i / 10
        saveName = name[:-4] + "co" + str(i_int) + ".jpg"
        saveImage = contrastEnhancement(Input_dir, name, i_int)
        saveImage.save(os.path.join(Output_dir, saveName))

下面为输出的三张图片,从左至右分别是不增强、增强0.5倍、增强1.5倍的效果图
在这里插入图片描述

亮度增强

对图片进行亮度增强,下述代码输出三张图片,分别是不增强、增强0.5倍、增强1.5倍的效果

from PIL import Image
from PIL import ImageEnhance
import os

from PIL import Image
from PIL import ImageEnhance
import os
import cv2
import numpy as np
'''
函 数 名:brightnessEnhancement(root_path,img_name,brightness)
函数功能:亮度增强
入口参数:
        root_path :图片根目录
        img_name :图片名称
        brightness :亮度
返 回 值:
        亮度增强后的图片
'''
def brightnessEnhancement(root_path,img_name,brightness):
    image = Image.open(os.path.join(root_path, img_name))
    enh_bri = ImageEnhance.Brightness(image)
    image_brightened = enh_bri.enhance(brightness)
    return image_brightened


Input_dir = r"D:\image_test\original"  # 要改变的图片的路径文件夹
Output_dir = r"D:\image_test\contrastEnhancement"  # 要保存的图片的路径文件夹

for name in os.listdir(Input_dir):
    saveName= name[:-4]+"original.png"
    image = Image.open(os.path.join(Input_dir, name))
    image.save(os.path.join(Output_dir,saveName))#保存原图

######################亮度增强#######################
    for i in range(5, 16, 10):
        i_int = i / 10# range()的传入参数只能是int类型,使用i与i_int做转换
        saveName= name[:-4]+"bright" + str(i_int) + ".jpg"
        saveImage=brightnessEnhancement(Input_dir,name,i_int)
        saveImage.save(os.path.join(Output_dir,saveName))

下面为输出的三张图片,从左至右分别是不增强、增强0.5倍、增强1.5倍的效果图
在这里插入图片描述

颜色增强

对图片进行颜色增强,下述代码输出三张图片,分别是不增强、增强0.5倍、增强1.5倍的效果

from PIL import Image
from PIL import ImageEnhance
import os

'''
函 数 名:colorEnhancement(root_path,img_name,color)
函数功能:颜色增强
入口参数:
        root_path :图片根目录
        img_name :图片名称
        color :颜色
返 回 值:
        颜色增强后的图片
'''
def colorEnhancement(root_path,img_name,color):
    image = Image.open(os.path.join(root_path, img_name))
    enh_col = ImageEnhance.Color(image)
    image_colored = enh_col.enhance(color)
    return image_colored

Input_dir = r"D:\image_test\original"  # 要改变的图片的路径文件夹
Output_dir = r"D:\image_test\contrastEnhancement"  # 要保存的图片的路径文件夹

for name in os.listdir(Input_dir):
    saveName= name[:-4]+"original.png"
    image = Image.open(os.path.join(Input_dir, name))
    image.save(os.path.join(Output_dir,saveName))#保存原图

#######################颜色增强#######################
    for i in range(5, 16, 10):  # range()的传入参数只能是int类型,使用i与i_int做转换
        i_int = i / 10
        saveName = name[:-4] + "colE"+ str(i_int) + ".jpg"
        saveImage = colorEnhancement(Input_dir, name, i_int)
        saveImage.save(os.path.join(Output_dir, saveName))

下面为输出的三张图片,从左至右分别是不增强、增强0.5倍、增强1.5倍的效果图
在这里插入图片描述

添加高斯噪声、运动模糊处理

对图片进行添加高斯噪声、运动模糊处理,下述代码输出三张图片,分别是不增强、添加高斯噪声、运动模糊处理的效果

from PIL import Image
import os
import cv2
import numpy as np
'''
函 数 名:gaussian_noise(img, mean, sigma)
函数功能:添加高斯噪声
入口参数:
        img :原图
        mean :均值
        sigma :标准差
返 回 值:
        噪声处理后的图片
'''
def gaussian_noise(img, mean, sigma):
    # 将图片灰度标准化
    img = (img / 255)
    # 产生高斯 noise
    noise = np.random.normal(mean, sigma, img.shape)
    # 将噪声和图片叠加
    gaussian_out = img + noise
    # 将超过 1 的置 1,低于 0 的置 0
    gaussian_out = np.clip(gaussian_out, 0, 1)
    # 将图片灰度范围的恢复为 0-255
    gaussian_out = np.uint8(gaussian_out*255)
    # 这里也会返回噪声,注意返回值
    return gaussian_out


'''
函 数 名:motion_blur(image)
函数功能:运动模糊化处理
入口参数:
        image :原图
返 回 值:
        模糊化处理后的图片
'''
def motion_blur(image):
    degree = 50
    angle = 45
    image = np.array(image)

    # 这里生成任意角度的运动模糊kernel的矩阵, degree越大,模糊程度越高
    M = cv2.getRotationMatrix2D((degree / 2, degree / 2), angle, 1)
    motion_blur_kernel = np.diag(np.ones(degree))
    motion_blur_kernel = cv2.warpAffine(motion_blur_kernel, M, (degree, degree))

    motion_blur_kernel = motion_blur_kernel / degree
    blurred = cv2.filter2D(image, -1, motion_blur_kernel)

    # convert to uint8
    cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)
    blurred = np.array(blurred, dtype=np.uint8)
    return blurred


'''
函 数 名:gauss_fuzzy_convert(input_dir, output_dir)
函数功能:将原图进行高斯和模糊化变换
入口参数:
        input_dir :原图路径
        output_dir :变换后路径
返 回 值:
        无
'''
def gauss_fuzzy_convert(input_dir, output_dir):
    for filename in os.listdir(input_dir):
        path = input_dir + "/" + filename# 获取文件路径
        fuzzy_image = cv2.imread(path)#读取图片
        noise_img = cv2.imread(path)#读取图片
        fuzzy_image_1 = motion_blur(fuzzy_image)
        noise_img_1 = gaussian_noise(noise_img, 0.1, 0.08) #高斯噪声
        cv2.imwrite(output_dir+'/'+filename[:-4] + "noise" + ".jpg",noise_img_1)
        cv2.imwrite(output_dir+'/'+filename[:-4] + "fuzzy" + ".jpg",fuzzy_image_1)


Input_dir = r"D:\image_test\original"  # 要改变的图片的路径文件夹
Output_dir = r"D:\image_test\contrastEnhancement"  # 要保存的图片的路径文件夹

for name in os.listdir(Input_dir):
    saveName= name[:-4]+"original.png"
    image = Image.open(os.path.join(Input_dir, name))
    image.save(os.path.join(Output_dir,saveName))#保存原图

########################添加高斯噪声、运动模糊处理#######################
    gauss_fuzzy_convert(Input_dir, Output_dir)

下面为输出的三张图片,从左至右分别是不增强、添加高斯噪声、运动模糊处理的效果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓shuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值