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)

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

你可能感兴趣的:(python,人工智能,计算机视觉)