本文使用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)#convertto 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)
下面为输出的三张图片,从左至右分别是不增强、添加高斯噪声、运动模糊处理的效果图
版权归原作者 晓shuo 所有, 如有侵权,请联系我们删除。