批量数据增强(扩充):目标检测系列(2)亮度、色域、对比度、噪声
简述
1.亮度
1)效果
原图:
降低亮度后:
2)代码分析
1.导入图片和标注文件路径
imgs_p="../aug_test_dataset/imgs/"
anns_p="../aug_test_dataset/anns/"
imgs_save_p="../aug_test_dataset/imgs_ed/"
anns_save_p="../aug_test_dataset/anns_ed/"
2.初始化(读取)
a, b = os.path.splitext(i) #.splitext方法将文件路径以.分隔开
img = cv2.imread(imgs_p + a + '.jpg')
tree = ET.parse(anns_p + a + '.xml')
root = tree.getroot()
flag = 1.4 # 将图像调暗,大于1为暗,小于1为亮
3.调用函数降低亮度
img = exposure.adjust_gamma(img, flag)
4.批量保存
cv2.imwrite(imgs_save_p + a + '_' + 'lit_d' + '.jpg',img)
tree.write(anns_save_p + a + '_'+ 'lit_d' +'.xml')
3)源码
import glob
import xml.dom.minidom
import cv2
import os,sys
import numpy as np
import random
from skimage.util import random_noise
import xml.etree.ElementTree as ET
from skimage import exposure
imgs_p="../aug_test_dataset/imgs/"
anns_p="../aug_test_dataset/anns/"
imgs_save_p="../aug_test_dataset/imgs_ed/"
anns_save_p="../aug_test_dataset/anns_ed/"
for i in os.listdir(imgs_p):
a, b = os.path.splitext(i)
img = cv2.imread(imgs_p + a + '.jpg')
tree = ET.parse(anns_p + a + '.xml')
root = tree.getroot()
flag = 1.4 # 将图像调暗,大于1为暗,小于1为亮
img = exposure.adjust_gamma(img, flag)
cv2.imwrite(imgs_save_p + a + '_' + 'lit_d' + '.jpg',img)
tree.write(anns_save_p + a + '_'+ 'lit_d' +'.xml')
2.色域
1)效果
原图:
更改色域后:
2)代码分析
1.调用函数更改图片色域(其余部分同上)
perms = (2,1,0) # r和b通道互换
img = img[:, :, perms]
3.对比度
1)效果
更改对比度后(调高为原来的1.5倍):
2)代码分析
调用函数将图像对比度调高(其余部分同上):
alpha = 1.5
img = img * alpha
img = img.clip(min=0, max=255)
4.添加噪声
1)效果
添加高斯噪声后:
2)代码分析
其余部分同上
img = random_noise(img, mode='gaussian', clip=True)*255