深度学习的数据增强(亮度,对比度,旋转)

原博客搬移到:https://blog.csdn.net/u013171226/article/details/107680285 

import os,cv2,shutil
import numpy as np
import random

#对比度和亮度
def Contrast_and_Brightness(alpha, beta, img):
    blank = np.zeros(img.shape, img.dtype)
    # dst = alpha * img + beta * blank
    dst = cv2.addWeighted(img, alpha, blank, 1-alpha, beta)
    return dst


def darker(image,percetage):
    image_copy = image.copy()
    w = image.shape[1]
    h = image.shape[0]
    #get darker
    for xi in range(0,w):
        for xj in range(0,h):
            image_copy[xj,xi,0] = int(image[xj,xi,0]*percetage)
            image_copy[xj,xi,1] = int(image[xj,xi,1]*percetage)
            image_copy[xj,xi,2] = int(image[xj,xi,2]*percetage)
    return image_copy

def brighter(image, percetage):
    w = image.shape[1]
    h = image.shape[0]
    #get brighter
    for xi in range(0,w):
        for xj in range(0,h):
            image[xj,xi,0] = np.clip(int(image[xj,xi,0]*percetage),a_max=255,a_min=0)
            image[xj,xi,1] = np.clip(int(image[xj,xi,1]*percetage),a_max=255,a_min=0)
            image[xj,xi,2] = np.clip(int(image[xj,xi,2]*percetage),a_max=255,a_min=0)
    return image

#旋转
def rotate(image, angle, scale=1):
    w = image.shape[1]
    h = image.shape[0]
    #rotate matrix
    M = cv2.getRotationMatrix2D((w/2,h/2), angle, scale)
    #rotate
    image = cv2.warpAffine(image,M,(w,h))
    return image

#高斯噪声
def addGaussianNoise(image,percetage):
    G_Noiseimg = image.copy()
    w = image.shape[1]
    h = image.shape[0]
    G_NoiseNum=int(percetage*image.shape[0]*image.shape[1])
    for i in range(G_NoiseNum):
        temp_x = np.random.randint(0,h)
        temp_y = np.random.randint(0,w)
        G_Noiseimg[temp_x][temp_y][np.random.randint(3)] = np.random.randn(1)[0]
    return G_Noiseimg

#翻转
def flip(img,angle):
    fliped=cv2.flip(img,angle)
    return fliped

def img_augmentation(path):
    if path[-3:]=="jpg":
        print("ok")
        img=cv2.imread(path)
        c=random.uniform(0.7,1.3)
        b=random.uniform(-60,60)

        c_img=Contrast_and_Brightness(c,0,img)
        b_img=Contrast_and_Brightness(1,b,img)

        #b=random.uniform(1,1.5)
        #img_brighter=brighter(img,b)
        #d=random.uniform(0.6,0.95)
        #img_dark=darker(img,d)

        angele_list=[-180,-90,-45,45,90,180]
        a=random.choice(angele_list)
        rotate_img=rotate(img,a)
        flip_list=[-1,0,1]
        f_p=random.choice(flip_list)
        flip_img=flip(img,f_p)

        (file_path,pic_name)=os.path.split(path)
        b_name="bright_"+pic_name #亮度
        c_name="contrast_"+pic_name #对比度
        r_name="rotate_"+pic_name #旋转
        f_name="flip_"+pic_name #翻转

        print(os.path.join(file_path,b_name))
        print(os.path.join(file_path,c_name))
        cv2.imwrite(os.path.join(file_path,b_name),b_img)
        cv2.imwrite(os.path.join(file_path,c_name),c_img)
        cv2.imwrite(os.path.join(file_path,r_name),rotate_img)
        cv2.imwrite(os.path.join(file_path,f_name),flip_img)

if __name__ == "__main__":
    path=''#改成自己的path
    # for dir_name in os.listdir(path):
    #     dir_path=os.path.join(path,dir_name)
    #     for dir1_name in os.listdir(dir_path):
    #         dir1_path=os.path.join(dir_path,dir1_name)
    for image_name in os.listdir(path):
        image_path = os.path.join(path, image_name)
        print(image_path)
        img_augmentation(image_path)

作者:cumtchw
出处:http://www.cnblogs.com/cumtchw/
我的博客就是我的学习笔记,学习过程中看到好的博客也会转载过来,若有侵权,与我联系,我会及时删除。

原文地址:https://www.cnblogs.com/cumtchw/p/12574978.html