import skimage
import io,os
import matplotlib.pyplot as plt
from PIL import Image,ImageEnhance
import cv2
import numpy as np
import random
#root_path为图像根目录,img_name为图像名字
def move(root_path,img_name,off): #平移,平移尺度为off
img = Image.open(os.path.join(root_path, img_name))
offset = img.offset(off,0)
return offset
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 aj_contrast(root_path,img_name): #调整对比度 两种方式 gamma/log
image = skimage.io.imread(os.path.join(root_path, img_name))
gam= skimage.exposure.adjust_gamma(image, 0.5)
skimage.io.imsave(os.path.join(root_path,img_name.split('.')[0] + '_gam.jpg'),gam)
log= skimage.exposure.adjust_log(image)
skimage.io.imsave(os.path.join(root_path,img_name.split('.')[0] + '_log.jpg'),log)
return gam,log
def rotation(root_path, img_name):
img = Image.open(os.path.join(root_path, img_name))
rotation_img = img.rotate(90) #旋转角度
rotation_img.save(os.path.join(root_path,img_name.split('.')[0] + '_rotation.jpg'))
return rotation_img
def randomGaussian(root_path, img_name, mean = 0, sigma = 25): #高斯噪声
image = Image.open(os.path.join(root_path, img_name))
im = np.array(image)
#设定高斯函数的偏移
means = 0
#设定高斯函数的标准差
sigma = 25
#r通道
r = im[:,:,0].flatten()
#g通道
g = im[:,:,1].flatten()
#b通道
b = im[:,:,2].flatten()
#计算新的像素值
for i in range(im.shape[0]*im.shape[1]):
pr = int(r[i]) + random.gauss(0,sigma)
pg = int(g[i]) + random.gauss(0,sigma)
pb = int(b[i]) + random.gauss(0,sigma)
if(pr < 0):
pr = 0
if(pr > 255):
pr = 255
if(pg < 0):
pg = 0
if(pg > 255):
pg = 255
if(pb < 0):
pb = 0
if(pb > 255):
pb = 255
r[i] = pr
g[i] = pg
b[i] = pb
im[:,:,0] = r.reshape([im.shape[0],im.shape[1]])
im[:,:,1] = g.reshape([im.shape[0],im.shape[1]])
im[:,:,2] = b.reshape([im.shape[0],im.shape[1]])
gaussian_image = gaussian_image = Image.fromarray(np.uint8(im))
gaussian_image.save(os.path.join(root_path, img_name.split('.')[0] + '_gaussian.jpg'))
return 1
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) # 调整图像的饱和度
color_image.save(os.path.join(root_path, img_name.split('.')[0] + '_color.jpg'))
random_factor = np.random.randint(10, 21) / 10. # 随机因子
brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor) # 调整图像的亮度
brightness_image.save(os.path.join(root_path, img_name.split('.')[0] + '_brightness.jpg'))
random_factor = np.random.randint(10, 21) / 10. # 随机因子
contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor) # 调整图像对比度
contrast_image.save(os.path.join(root_path, img_name.split('.')[0] + '_contrast.jpg'))
random_factor = np.random.randint(0, 31) / 10. # 随机因子
ImageEnhance.Sharpness(contrast_image).enhance(random_factor) # 调整图像锐度
# skimage.io.imsave(os.path.join(root_path, img_name.split('.')[0] + '_enhance.jpg'), ImageEnhance)
return 1
if __name__ == '__main__':
root = "/home/yfzx/dataset/TextCor/ps"
image_names = os.listdir(root)
# file_save_path = "photo2/"
for image_name in image_names:
# move(root, image_name, 20)
flip(root, image_name)
aj_contrast(root, image_name)
rotation(root, image_name)
randomGaussian(root, image_name)
randomColor(root, image_name)
图像增强代码
最新推荐文章于 2024-05-01 17:04:51 发布