注意:我的数据集名字从1开始的,所以是for i in range(1,num),所以倒数第三句
str(i + num-1) 如果是从零开始就不用-1。另外文件名以及图片大小(1280,1024)也要根据自己的数据集做修改
图片平移:
import cv2 as cv
import numpy as np
import random
import xml.etree.ElementTree as et# 图片平移 i + num
def photo_move(name, num):for i in range(1, num):a = random.choice([-1, 1])b = random.choice([-1, 1])c = random.randint(30, 50)d = random.randint(30, 50)e1 = random.randint(0, 255)f1 = random.randint(0, 255)g1 = random.randint(0, 255)# 定义位移矩阵,x方向移动a*c,y方向移动b*d,并且使用random库实现随机偏移matshift = np.float32([[1, 0, a*c], [0, 1, b*d]])# C:\Users\lx\Desktop\dataset\ban\photo_raw# 生成图片并保存img = cv.imread('C:/Users/86188/Desktop/dataset/' + name + '/photo_raw/' + name + str(i) + '.jpg')dst = cv.warpAffine(img, matshift, (1280,1024), borderValue = (e1, f1, g1))cv.imwrite('C:/Users/86188/Desktop/dataset/' + name + '/photo_enhancement/' + name + str(i + num-1) + '.jpg', dst)# 获得二维矩阵xml_path = 'C:/Users/86188/Desktop/dataset/' + name + '/label_raw/' + name + str(i) + '.xml'xml_file = et.parse(xml_path)root = xml_file.getroot()objs = root.findall('object')for obj in objs:bnd = obj.find('bndbox')# if obj.find('name').text != name:#      print('wrong')#     breakxmin = float(bnd.find('xmin').text)ymin = float(bnd.find('ymin').text)xmax = float(bnd.find('xmax').text)ymax = float(bnd.find('ymax').text)ju_zhen = np.array([[xmin, xmax],[ymin, ymax],[1, 1]])# 保存变换后坐标点文件juzhen_new = np.dot(matshift, ju_zhen)      # 矩阵乘法if juzhen_new[0][0] + juzhen_new[1][0] > juzhen_new[0][1] + juzhen_new[1][1]:breakbnd.find('xmin').text = str(int(juzhen_new[0][0]))bnd.find('ymin').text = str(int(juzhen_new[1][0]))bnd.find('xmax').text = str(int(juzhen_new[0][1]))bnd.find('ymax').text = str(int(juzhen_new[1][1]))xml_path_new = 'C:/Users/86188/Desktop/dataset/' + name + '/label_enhancement/' + name + str(i + num-1) + '.xml'xml_file.write(xml_path_new)  # 更新xml文件print('平移', i+num)

图片缩放 :

def photo_zoom_in_and_out(name, num):for i in range(1, num):a = random.choice([0.8, 0.9, 0.95, 1.05, 1.08])b = random.choice([0.8, 0.9, 0.98, 1.05, 1.08])d = random.randint(0, 255)e = random.randint(0, 255)f = random.randint(0, 255)# 定义缩放矩阵matshift = np.float32([[a, 0, 0], [0, b, 0]])  # 定义缩放矩阵,长宽比为随机数# 生成并保存图片img = cv.imread('C:/Users/86188/Desktop/dataset/' + name + '/photo_raw/' + name + str(i) + '.jpg')dst = cv.warpAffine(img, matshift, (1280,1024), borderValue=(d, e, f))  # 画布尺寸是和原来一样cv.imwrite('C:/Users/86188/Desktop/dataset/' + name + '/photo_enhancement/' + name + str(i + 2* num-1) + '.jpg', dst)# 获得二维矩阵xml_path = 'C:/Users/86188/Desktop/dataset/' + name + '/label_raw/' + name + str(i) + '.xml'xml_file = et.parse(xml_path)root = xml_file.getroot()objs = root.findall('object')for obj in objs:bnd = obj.find('bndbox')xmin = float(bnd.find('xmin').text)ymin = float(bnd.find('ymin').text)xmax = float(bnd.find('xmax').text)ymax = float(bnd.find('ymax').text)ju_zhen = np.array([[xmin, xmax],[ymin, ymax],[1, 1]])# 保存变换后坐标点文件juzhen_new = np.dot(matshift, ju_zhen)if juzhen_new[0][0] + juzhen_new[1][0] > juzhen_new[0][1] + juzhen_new[1][1]:breakbnd.find('xmin').text = str(int(juzhen_new[0][0]))bnd.find('ymin').text = str(int(juzhen_new[1][0]))bnd.find('xmax').text = str(int(juzhen_new[0][1]))bnd.find('ymax').text = str(int(juzhen_new[1][1]))xml_path_new = 'C:/Users/86188/Desktop/dataset/' + name + '/label_enhancement/' + name + str(i + 2* num-1) + '.xml'xml_file.write(xml_path_new)  # 更新xml文件print('缩放', i + 2 * num)

水平翻转:

def shuiping_photo_fan_zhuan(name, num):# 参数2 必选参数。用于指定镜像翻转的类型,0表示绕×轴正直翻转,即垂直镜像翻转;1表示绕y轴翻转,即水平镜像翻转;-1表示绕×轴、y轴两个轴翻转,即对角镜像翻转。for i in range(1, num):img = cv.imread('C:/Users/86188/Desktop/dataset/' + name + '/photo_raw/' + name + str(i) + '.jpg')dst = cv.flip(img, 1)cv.imwrite('C:/Users/86188/Desktop/dataset/' + name + '/photo_enhancement/' + name + str(i + 3* num-1) + '.jpg', dst)# 获得坐标值xml_path = 'C:/Users/86188/Desktop/dataset/' + name + '/label_raw/' + name + str(i) + '.xml'xml_file = et.parse(xml_path)root = xml_file.getroot()objs = root.findall('object')for obj in objs:bnd = obj.find('bndbox')x1 = float(bnd.find('xmin').text)# y1 = float(bnd.find('ymin').text)x2 = float(bnd.find('xmax').text)# y2 = float(bnd.find('ymax').text)# x 值 变化xmin = 1280 - x2xmax = 1280 - x1bnd.find('xmin').text = str(int(xmin))bnd.find('xmax').text = str(int(xmax))xml_path_new = 'C:/Users/86188/Desktop/dataset/' + name + '/label_enhancement/' + name + str(i +3*  num-1) + '.xml'xml_file.write(xml_path_new)  # 更新xml文件print('水平翻转', i + 3 * num)

垂直翻转:

def chuizhi_photo_fan_zhuan(name, num):# 参数2 必选参数。用于指定镜像翻转的类型,0表示绕×轴正直翻转,即垂直镜像翻转;1表示绕y轴翻转,即水平镜像翻转;-1表示绕×轴、y轴两个轴翻转,即对角镜像翻转。for i in range(1, num):img = cv.imread('C:/Users/86188/Desktop/dataset/' + name + '/photo_raw/' + name + str(i) + '.jpg')dst = cv.flip(img, 0)cv.imwrite('C:/Users/86188/Desktop/dataset/' + name + '/photo_enhancement/' + name + str(i + 4 * num-1) + '.jpg', dst)# 获得坐标值xml_path = 'C:/Users/86188/Desktop/dataset/' + name + '/label_raw/' + name + str(i) + '.xml'xml_file = et.parse(xml_path)root = xml_file.getroot()objs = root.findall('object')for obj in objs:bnd = obj.find('bndbox')x1 = float(bnd.find('xmin').text)y1 = float(bnd.find('ymin').text)x2 = float(bnd.find('xmax').text)y2 = float(bnd.find('ymax').text)# y 值 变化ymin = 1024 - y2ymax = 1024 - y1bnd.find('ymin').text = str(int(ymin))bnd.find('ymax').text = str(int(ymax))bnd.find('ymin').text = str(int(ymin))bnd.find('ymax').text = str(int(ymax))xml_path_new = 'C:/Users/86188/Desktop/dataset/' + name + '/label_enhancement/' + name + str(i + 4 * num-1) + '.xml'xml_file.write(xml_path_new)  # 更新xml文件print('垂直翻转', i + 4 * num)

垂直水平翻转:

def chuizhi_shuiping_photo_fan_zhuan(name, num):# 参数2 必选参数。用于指定镜像翻转的类型,0表示绕×轴正直翻转,即垂直镜像翻转;1表示绕y轴翻转,即水平镜像翻转;-1表示绕×轴、y轴两个轴翻转,即对角镜像翻转。for i in range(1, num):img = cv.imread('C:/Users/86188/Desktop/dataset/' + name + '/photo_raw/' + name + str(i) + '.jpg')dst = cv.flip(img, -1)cv.imwrite('C:/Users/86188/Desktop/dataset/' + name + '/photo_enhancement/' + name + str(i + 5 * num-1) + '.jpg', dst)# 获得坐标值xml_path = 'C:/Users/86188/Desktop/dataset/' + name + '/label_raw/' + name + str(i) + '.xml'xml_file = et.parse(xml_path)root = xml_file.getroot()obj = root.find('object')bnd = obj.find('bndbox')x1 = float(bnd.find('xmin').text)y1 = float(bnd.find('ymin').text)x2 = float(bnd.find('xmax').text)y2 = float(bnd.find('ymax').text)# y 值 变化xmin = 1280 - x2xmax = 1280 - x1ymin = 1024 - y2ymax = 1024 - y1bnd.find('xmin').text = str(int(xmin))bnd.find('xmax').text = str(int(xmax))bnd.find('ymin').text = str(int(ymin))bnd.find('ymax').text = str(int(ymax))xml_path_new = 'C:/Users/86188/Desktop/dataset/' + name + '/label_enhancement/' + name + str(i + 5 * num-1) + '.xml'xml_file.write(xml_path_new)  # 更新xml文件print('垂直水平翻转', i + 5 * num)

亮度和对比度改变:

def adjust_brightness_and_contrast(name, num):for i in range(1, num):a = random.choice([0.8,0.9, 1.05, 1.08])b = random.randint(-30, 30)img = cv.imread('C:/Users/86188/Desktop/dataset/' + name + '/photo_raw/' + name + str(i) + '.jpg')h, w, ch = img.shapeblank = np.zeros([h, w, ch], img.dtype)dst = cv.addWeighted(img, a, blank, 1-a, b)cv.imwrite('C:/Users/86188/Desktop/dataset/' + name + '/photo_enhancement/' + name + str(i + 6*num-1) + '.jpg', dst)xml_path = 'C:/Users/86188/Desktop/dataset/' + name + '/label_raw/' + name + str(i) + '.xml'xml_file = et.parse(xml_path)xml_path_new = 'C:/Users/86188/Desktop/dataset/' + name + '/label_enhancement/' + name + str(i + 6*num-1) + '.xml'xml_file.write(xml_path_new)  # 更新xml文件print('亮度对比度',i + num)

最后:

num_表示的是你数据集每个类别的个数

list_lingjian = ['TB', 'D71', 'TB20K']
num_ = 45
k=0
photo_move(name=list_lingjian[k], num=num_)
photo_zoom_in_and_out(name=list_lingjian[k], num=num_)
#fang_she_change(name=list_lingjian[k], num=num_)
shuiping_photo_fan_zhuan(name=list_lingjian[k], num=num_)
chuizhi_photo_fan_zhuan(name=list_lingjian[k], num=num_)
chuizhi_shuiping_photo_fan_zhuan(name=list_lingjian[k], num=num_)
adjust_brightness_and_contrast(list_lingjian[k], num=num_ )

目标检测带标签数据增强代码相关推荐

  1. 目标检测中的数据增强

    目标检测中的数据增强 技术标签: 深度学习 人工智能 一.图像遮挡 ①random erase 用随机值或训练集的平均像素替换图像区域. URL: https://arxiv.org/pdf/1708 ...

  2. 目标检测中的数据增强,包括bbox的变换

    检测和分类不同,检测过程中,图片处理以后,bbox往往也需要同步变换 里面碰到最坑的地方,在于cv.rectangle(),如果是对图像进行操作,一定要deepcopy 文章目录 1. 水平翻转 1. ...

  3. 目标检测中的数据增强:mosaic,mixup,cutout,cutmix

    认真读绝对不亏,不要看到全是字就 怕  了. 最近学目标检测,在看yolov4的时候,看到了mosaic数据增强方法,所以查阅了一些知识,因为网上的讲解都注重于原理,不注重详细的实现方法以及细节,而工 ...

  4. 汇总|目标检测中的数据增强、backbone、head、neck、损失函数

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:Tom Hardy https://zhuanlan.zhihu.com/p/137769687 ...

  5. 目标检测 慎用旋转数据增强

    目录 概述 一个具体的例子 原因分析 影响分析 总结建议 概述 在进行SSD.YOLO等目标检测类模型训练的时候,为了提升模型的识别率和泛化能力,一般会采用数据增强策略,主要包括调整图片的亮度.对比度 ...

  6. 目标检测带标签样本增广工具

    github:https://github.com/XuelianZ/augment 本工具主要用于基于图像的目标检测样本增广.源标注文件为xml文件,采用voc标准标注格式,如下 样本增广工具主要实 ...

  7. 目标检测使用的数据增强方法汇总

    向AI转型的程序员都关注了这个号

  8. 基于YOLOv4的目标检测系统(附MATLAB代码+GUI实现)

    摘要:本文介绍了一种MATLAB实现的目标检测系统代码,采用 YOLOv4 检测网络作为核心模型,用于训练和检测各种任务下的目标,并在GUI界面中对各种目标检测结果可视化.文章详细介绍了YOLOv4的 ...

  9. GPT-3+DALL-E 2 = 海量带标签数据自动生成 ?

    文章来源:新智元 https://mp.weixin.qq.com/s/1A3dzES_TSIQqUG1fr32_g 导读 没有优质数据,再强大的模型也无法发挥作用.最近有研究人员发现,GPT-3+D ...

最新文章

  1. 用数学模型向你解释离婚
  2. paip.读取WEB.XML中的参数值总结
  3. python操作word 查找_Python实现搜索关键字定位文件01
  4. 下载官方Intel的Windows 10网卡驱动
  5. 葵花8号卫星数据简介与下载(一)——数据介绍与FTP下载
  6. php中lpush(),lPush 命令/方法/函数
  7. 阶跃函数和符号函数的傅里叶变换
  8. SQL Server 遇到报错解决办法--更新中
  9. Model和ModelMap的关系
  10. 谷歌勒令Chrome扩展程序开发者减少请求数据量 并打击欺骗性安装
  11. 5G建设:作用究竟有多大
  12. CF1375E Inversion SwapSort
  13. 【Updating】二〇二一流水账
  14. folly库安装(3)libevent、libunwind的安装
  15. 达人评测 n5095和i3 10110u选哪个
  16. RocketMQTemplate基本使用
  17. 超级IP名片PK云集微店,社交电商哪家强?
  18. 生产实习报告(15)
  19. Windows10触控板防误触
  20. word文档通配符换行_职场小技巧|没想到word中的表格就可以排版图片大小

热门文章

  1. 图片格式之间的相互转化
  2. 盘点那些必问的数据结构算法题之链表
  3. 学习笔记 在B站上学习了pink老师的js,有个循环的作业:简易ATM
  4. 【工具推荐】关于《轻笔记》
  5. Django 序列化和反序列化(九)
  6. SQL-统计公司迟到名单
  7. 雅安+米亚罗,不一样的风味
  8. W530安装外置N显卡,实现3显卡同时使用
  9. python怎么去掉末尾标点符号_python中怎么去掉标点符号
  10. Pico neo3 全景视频 从零开始 开发记录