Python3 实现批量图像数据增强(扩增)并复制xml标签文件目标检测笔记

Posted K同学啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 实现批量图像数据增强(扩增)并复制xml标签文件目标检测笔记相关的知识,希望对你有一定的参考价值。

增强效果:

# -*- coding: utf-8 -*-

import cv2
import numpy as np
import os.path
import shutil

# 椒盐噪声
def SaltAndPepper(src, percetage):
    SP_NoiseImg = src.copy()
    SP_NoiseNum = int(percetage * src.shape[0] * src.shape[1])
    for i in range(SP_NoiseNum):
        randR = np.random.randint(0, src.shape[0] - 1)
        randG = np.random.randint(0, src.shape[1] - 1)
        randB = np.random.randint(0, 3)
        if np.random.randint(0, 1) == 0:
            SP_NoiseImg[randR, randG, randB] = 0
        else:
            SP_NoiseImg[randR, randG, randB] = 255
    return SP_NoiseImg

# 高斯噪声
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 brightness(image, percetage):
    image_copy = image.copy()
    w = image.shape[1]
    h = image.shape[0]
    # get brighter
    for xi in range(0, w):
        for xj in range(0, h):
            image_copy[xj, xi, 0] = np.clip(int(image[xj, xi, 0] * percetage), a_max=255, a_min=0)
            image_copy[xj, xi, 1] = np.clip(int(image[xj, xi, 1] * percetage), a_max=255, a_min=0)
            image_copy[xj, xi, 2] = np.clip(int(image[xj, xi, 2] * percetage), a_max=255, a_min=0)
    return image_copy

if __name__ == '__main__':
    # 图片文件夹路径
    input_jpg = './dataset/images'
    input_xml = './dataset/Annotations'
    output_jpg = './augmentation_data/images'
    output_xml = './augmentation_data/Annotations'

    for img_name in os.listdir(input_jpg):
        name = img_name.split('.')[0]
        print(name)
        print(img_name)
        img_path = os.path.join(input_jpg, img_name)
        img = cv2.imread(img_path)
        xml_src_path = os.path.join(input_xml, name + '.xml')
        xml_dst_path = os.path.join(output_xml, name)

        # 增加噪声
        img_gauss = addGaussianNoise(img, 0.1)
        cv2.imwrite(os.path.join(output_jpg, name + '_noise.png'), img_gauss)
        shutil.copyfile(xml_src_path, xml_dst_path + '_noise.xml')
        print("Save " + os.path.join(output_jpg, name + '_noise.png') + " Successfully!")

        # 变暗
        img_darker = brightness(img, 0.9)
        cv2.imwrite(os.path.join(output_jpg, name + '_darker.png'), img_darker)
        shutil.copyfile(xml_src_path, xml_dst_path + '_darker.xml')
        print("Save " + os.path.join(output_jpg, name + '_darker.png') + " Successfully!")
        
        # 变亮
        img_brighter = brightness(img, 1.1)
        cv2.imwrite(os.path.join(output_jpg, name + '_brighter.png'), img_brighter)
        shutil.copyfile(xml_src_path, xml_dst_path + '_brighter.xml')
        print("Save " + os.path.join(output_jpg, name + '_brighter.png') + " Successfully!")
        
        # 高斯滤波
        blur = cv2.GaussianBlur(img, (7, 7), 1.1)
        #      cv2.GaussianBlur(图像,卷积核,标准差)
        cv2.imwrite(os.path.join(output_jpg, name + '_blur.png'), blur)
        shutil.copyfile(xml_src_path, xml_dst_path + '_blur.xml')
        print("Save " + os.path.join(output_jpg, name + '_blur.png') + " Successfully!")

以上是关于Python3 实现批量图像数据增强(扩增)并复制xml标签文件目标检测笔记的主要内容,如果未能解决你的问题,请参考以下文章

Python批量增强图像

数据增强的方法都有哪些

Python3 实现批量创建 Crowd 用户并分配组

Python3基础 列表乘一个整数 扩增列表

keras训练函数fit和fit_generator对比,图像生成器ImageDataGenerator数据增强

Pillow