本代码共采用了四种数据增强,如采用其他数据增强方式,可以参考本代码,随意替换。

'''

imageDir 为原数据集的存放位置

saveDir 为数据增强后数据的存放位置

'''

from PIL import Image

from PIL import ImageEnhance

import os

import cv2

import numpy as np

import glob

def flip(root_path): #翻转图像

img = Image.open(root_path)

filp_img = img.transpose(Image.FLIP_LEFT_RIGHT)

return filp_img

def rotation(root_path):

img = Image.open(root_path)

rotation_img = img.rotate(90) #旋转角度

return rotation_img

def brightnessEnhancement(root_path):#亮度增强

image = Image.open(root_path)

enh_bri = ImageEnhance.Brightness(image)

brightness = 1.5

image_brightened = enh_bri.enhance(brightness)

return image_brightened

def contrastEnhancement(root_path): # 对比度增强

image = Image.open(root_path)

enh_con = ImageEnhance.Contrast(image)

contrast = 1.5

image_contrasted = enh_con.enhance(contrast)

return image_contrasted

def colorEnhancement(root_path):#颜色增强

image = Image.open(root_path)

enh_col = ImageEnhance.Color(image)

color = 1.5

image_colored = enh_col.enhance(color)

return image_colored

def randomColor(root_path): #随机颜色

"""

对图像进行颜色抖动

:param image: PIL的图像image

:return: 有颜色色差的图像image

"""

image = Image.open(root_path)

random_factor = np.random.randint(0, 31) / 10. # 随机因子

color_image = ImageEnhance.Color(image).enhance(random_factor) # 调整图像的饱和度

random_factor = np.random.randint(10, 21) / 10. # 随机因子

brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor) # 调整图像的亮度

random_factor = np.random.randint(10, 21) / 10. # 随机因子

contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor) # 调整图像对比度

random_factor = np.random.randint(0, 31) / 10. # 随机因子

return ImageEnhance.Sharpness(contrast_image).enhance(random_factor) # 调整图像锐度

if __name__ == '__main__':

imageDir = "D:/untitled/数据增强/train/" # 要改变的图片的路径文件夹

saveDir = 'D:/untitled/Month/train_aug/' # 要保存的图片的路径文件夹

cate = [imageDir + x for x in os.listdir(imageDir)]

print(cate)

for idx, folder in enumerate(cate):

print("idx = ",idx,"folder = ",folder)

for i in glob.glob(folder + '/*.png'):

print("i = ",i)

saveName= i[:-4]+"fl.jpg"

saveImage = flip(i)

saveImage.save(os.path.join(saveDir,saveName))

saveName = i[:-4] + "ro.jpg"

saveImage = rotation(i)

saveImage.save(os.path.join(saveDir, saveName))

saveName = i[:-4] + "be.jpg"

saveImage = brightnessEnhancement(i)

saveImage.save(os.path.join(saveDir, saveName))

saveName = i[:-4] + "co.jpg"

saveImage = contrastEnhancement(i)

saveImage.save(os.path.join(saveDir, saveName))

saveName = i[:-4] + "cl.jpg"

saveImage = colorEnhancement(i)

saveImage.save(os.path.join(saveDir, saveName))

saveName = i[:-4] + "ra.jpg"

saveImage = randomColor(i)

saveImage.save(os.path.join(saveDir, saveName))

如果多类别文件夹,如图像分类,需要统一进行数据增强,加入了文件夹遍历,可自取

from tkinter import image_names

from matplotlib.animation import ImageMagickBase

def flip(root_path,img_name): #翻转图像

img = Image.open(os.path.join(root_path, img_name))

filp_img = img.transpose(Image.FLIP_LEFT_RIGHT)

# filp_img.save(os.path.join(root_path,img_name.split('.')[0] + '_flip.jpg'))

return filp_img

def rotation(root_path, img_name):

img = Image.open(os.path.join(root_path, img_name))

rotation_img = img.rotate(20) #旋转角度

# rotation_img.save(os.path.join(root_path,img_name.split('.')[0] + '_rotation.jpg'))

return rotation_img

def randomColor(root_path, img_name): #随机颜色

"""

对图像进行颜色抖动

:param image: PIL的图像image

:return: 有颜色色差的图像image

"""

image = Image.open(os.path.join(root_path, img_name))

random_factor = np.random.randint(0, 31) / 10. # 随机因子

color_image = ImageEnhance.Color(image).enhance(random_factor) # 调整图像的饱和度

random_factor = np.random.randint(10, 21) / 10. # 随机因子

brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor) # 调整图像的亮度

random_factor = np.random.randint(10, 21) / 10. # 随机因子

contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor) # 调整图像对比度

random_factor = np.random.randint(0, 31) / 10. # 随机因子

return ImageEnhance.Sharpness(contrast_image).enhance(random_factor) # 调整图像锐度

def contrastEnhancement(root_path, img_name): # 对比度增强

image = Image.open(os.path.join(root_path, img_name))

enh_con = ImageEnhance.Contrast(image)

contrast = 1.5

image_contrasted = enh_con.enhance(contrast)

return image_contrasted

def brightnessEnhancement(root_path,img_name):#亮度增强

image = Image.open(os.path.join(root_path, img_name))

enh_bri = ImageEnhance.Brightness(image)

brightness = 1.5

image_brightened = enh_bri.enhance(brightness)

return image_brightened

def colorEnhancement(root_path,img_name):#颜色增强

image = Image.open(os.path.join(root_path, img_name))

enh_col = ImageEnhance.Color(image)

color = 1.5

image_colored = enh_col.enhance(color)

return image_colored

from PIL import Image

from PIL import ImageEnhance

import os

import cv2

import numpy as np

imageDir="./image" #要改变的图片的路径文件夹

saveDir="./save" #要保存的图片的路径文件夹

path = os.path.join(imageDir)

rootlist=[]

dirlist=[]

filelist=[]

for root, dirnames, filenames in os.walk(path):

rootlist.append(root)

for dirname in dirnames:

dir_save_path = os.path.join(saveDir,dirname)

if not os.path.exists(dir_save_path):

os.makedirs(dir_save_path)

dirlist.append(os.path.join(dir_save_path))

del rootlist[0]

print(dirlist)

for i in range(len(rootlist)):

for r, d, f in os.walk(rootlist[i]):

for name in f:

filelist.append(os.path.join(name))

filelist.sort(key=lambda x:int(x[:-4]))

for j in range(len(filelist)):

saveName= filelist[j][:-4]+"id.png"

image = Image.open(os.path.join(rootlist[i], filelist[j]))

image.save(os.path.join(dirlist[i],saveName))

saveName= filelist[j][:-4]+"fl.png"

saveImage=flip(rootlist[i], filelist[j])

saveImage.save(os.path.join(dirlist[i],saveName))

saveName= filelist[j][:-4]+"ro.png"

saveImage=rotation(rootlist[i], filelist[j])

saveImage.save(os.path.join(dirlist[i],saveName))

saveName= filelist[j][:-4]+"be.png"

saveImage=brightnessEnhancement(rootlist[i], filelist[j])

saveImage.save(os.path.join(dirlist[i],saveName))

saveName= filelist[j][:-4]+"ra.png"

saveImage=randomColor(rootlist[i], filelist[j])

saveImage.save(os.path.join(dirlist[i],saveName))

saveName= filelist[j][:-4]+"con.png"

saveImage=contrastEnhancement(rootlist[i], filelist[j])

saveImage.save(os.path.join(dirlist[i],saveName))

saveName= filelist[j][:-4]+"col.png"

saveImage=colorEnhancement(rootlist[i], filelist[j])

saveImage.save(os.path.join(dirlist[i],saveName))

    filelist.clear()

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: