深度学习数据集扩充代码

# -*-coding = utf-8 -*-
"""
1. Image_flip:翻转图片
2. Image_traslation:平移图片
3. Image_rotate:旋转图片
4. Image_noise:添加噪声
"""
import os
import cv2
import numpy as np
from random import choice
import random

def Image_flip(img):
    """
    :param img:原始图片矩阵
    :return: 0-垂直; 1-水平; -1-垂直&水平
    """
    if img is None:
        return
    paras = [0, 1, -1]
    img_new = cv2.flip(img, choice(paras))
    return img_new

def Image_traslation(img):
    """
    :param img: 原始图片矩阵
    :return: [1, 0, 100]-宽右移100像素; [0, 1, 100]-高下移100像素
    """
    paras_wide = [[1, 0, 100], [1, 0, -100]]
    paras_height = [[0, 1, 100], [0, 1, -100]]
    rows, cols = img.shape[:2]
    img_shift = np.float32([choice(paras_wide), choice(paras_height)])
    border_value = tuple(int(x) for x in choice(choice(img)))
    img_new = cv2.warpAffine(img, img_shift, (cols, rows), borderValue=border_value)
    return img_new

def Image_rotate(img):
    """
    :param img:原始图片矩阵
    :return:旋转中心,旋转角度,缩放比例
    """
    rows, cols = img.shape[:2]
    rotate_core = (cols/2, rows/2)
    rotate_angle = [60, -60, 45, -45, 90, -90, 210, 240, -210, -240]
    paras = cv2.getRotationMatrix2D(rotate_core, choice(rotate_angle), 1)
    border_value = tuple(int(x) for x in choice(choice(img)))
    img_new = cv2.warpAffine(img, paras, (cols, rows), borderValue=border_value)
    return img_new

def Image_noise(img):
    """
    :param img:原始图片矩阵
    :return: 0-高斯噪声,1-椒盐噪声
    """
    paras = [0, 1]
    gaussian_class = choice(paras)
    noise_ratio = [0.05, 0.06, 0.08]
    if gaussian_class == 1:
        output = np.zeros(img.shape, np.uint8)
        prob = choice(noise_ratio)
        thres = 1 - prob
        #print('prob', prob)
        for i in range(img.shape[0]):
            for j in range(img.shape[1]):
                rdn = random.random()
                if rdn < prob:
                    output[i][j] = 0
                elif rdn > thres:
                    output[i][j] = 255
                else:
                    output[i][j] = img[i][j]
        return output
    else:
        mean = 0
        var=choice([0.001, 0.002, 0.003])
        #print('var', var)
        img = np.array(img/255, dtype=float)
        noise = np.random.normal(mean, var**0.5, img.shape)
        out = img + noise
        if out.min() < 0:
            low_clip = -1
        else:
            low_clip = 0
        out = np.clip(out, low_clip, 1.0)
        out = np.uint8(out*255)
        return out

if __name__ == "__main__":
    """
    path_read: 读取原始数据集图片的位置;
    path_write:图片扩增后存放的位置;
    picture_size:图片之后存储的尺寸;
    enhance_hum: 需要通过扩增手段增加的图片数量
    """
    path_read = "D:/pic_old/"
    path_write = "D:/pic_new/"
    enhance_num = 500
    image_list = [x for x in os.listdir(path_read)]
    existed_img = len(image_list)
    while enhance_num > 0:
        img = choice(image_list)
        image = cv2.imread(path_read+img, cv2.IMREAD_COLOR)
        algorithm = [1, 2, 3, 4]
        random_process = choice(algorithm)
        if random_process == 1:
            image = Image_flip(image)
        elif random_process == 2:
            image = Image_traslation(image)
        elif random_process == 3:
            image = Image_rotate(image)
        else:
            image = Image_noise(image)
        image_dir = path_write+str(enhance_num+existed_img-1).zfill(5)+'.jpg'
        cv2.imwrite(image_dir, image)
        enhance_num -= 1

这个代码是这位博主的https://blog.csdn.net/Celibrity/article/details/106297733

我直接复制过来了,为了防止侵权,放上这位博主的链接

你可能感兴趣的:(深度学习,计算机视觉,人工智能)