Python图像增强

本文使用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)

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

猜你喜欢

转载自blog.csdn.net/python_plus/article/details/128420591