[数据集处理]数据增强1

工欲善其事,必先利其器

[数据集处理]数据增强2 参考了 yolo v4 马赛克数据增强方法,进行img\xml的四合一

记录一个标注过的图片水平翻转,对应的xml标注信息也同步的小脚本

import cv2
import os
import sys
import re
import xml.etree.ElementTree as ET
from PIL import Image


imgreadpath = './img/'
imgwritepath  = './f_img/'

xmlreadpath = './xml/'
xmlwritepath = './f_xml/'


def flitimg(imgname):
	image = cv2.imread(imgname)
	name = imgname.split('/')[-1].split('.')[-2]
	image_f = cv2.flip(image, 1)  #1:水平翻转
	cv2.imwrite(imgwritepath + 'f' + name + '.jpg',image_f)

def flitxml(xmlname):

	bwidth = ''
	bheight = ''
	bdepth = ''

	text=open(xmlname).read()
	f_test = open(xmlwritepath + 'f' + xmlname.split("/")[-1].split('.')[-2] + '.xml', 'w')

	text=re.sub(u"[\x00-\x08\x0b-\x0c\x0e-\x1f]+",u"",text)
	root=ET.fromstring(text)

	if root.findtext('folder') == ' ':
		print("no folder filename:",filename)
		print('A')
	else:
		folder = root.findtext('folder')
	
	if root.findtext('filename') == ' ':
		print("no filename filename:",filename)
		print('B')
	else:
		filename = root.findtext('filename')

	# if root.findall('size') == []:
	# 	print("no size filename:",filename)
	# 	print('C')
	# else:
	# 	size = root.findall('size')
	# 	print(size)
	# 	size = size[0]
	# 	bwidth = size.findtext('width')
	# 	bheight = size.findtext('height')
	# 	bdepth = size.findtext('depth')
	img = Image.open(imgwritepath + 'f' + xmlname.split("/")[-1].split('.')[-2] + '.jpg')
	bwidth, bheight = img.size
	bdepth  =3

	f_test.write('<annotation>\n')
	f_test.write('	<folder>' + folder + '</folder>\n')
	f_test.write('	<filename>' + filename + '</filename>\n')
	f_test.write('	<size>\n')
	f_test.write('		<width>' + str(bwidth) + '</width>\n')
	f_test.write('		<height>' + str(bheight) + '</height>\n')
	f_test.write('		<depth>' + str(bdepth) + '</depth>\n')
	f_test.write('	</size>\n')

	if root.findall('object') == []:
		print("no object filename:",filename)
	else:
		for object in root.findall('object'):
			label = object.findtext('name')
			x1 = object.findtext('bndbox/xmin')
			y1 = object.findtext('bndbox/ymin')
			x2 = object.findtext('bndbox/xmax')
			y2 = object.findtext('bndbox/ymax')

			f_test.write('	<object>\n')
			f_test.write('		<name>' + label + '</name>\n')
			f_test.write('		<bndbox>\n')
			f_test.write('			<xmin>' + str(int(bwidth) - int(x1) - (int(x2) - int(x1))) + '</xmin>\n')
			f_test.write('			<ymin>' + y1 + '</ymin>\n')
			f_test.write('			<xmax>' + str(int(bwidth) - int(x2) + (int(x2) - int(x1))) + '</xmax>\n')
			f_test.write('			<ymax>' + y2 + '</ymax>\n')
			f_test.write('		</bndbox>\n')
			f_test.write('	</object>\n')

	f_test.write('</annotation>\n')
	f_test.close()





if __name__ == '__main__':

	imgnames = os.listdir(imgreadpath)
	for imgname in imgnames:
	    imgname = imgreadpath + imgname
		flitimg(imgname)

	xmlnames = os.listdir(xmlreadpath)
	for xmlname in xmlnames:
		xmlname = xmlreadpath + xmlname
		flitxml(xmlname)

代码粘上CSDN后缩进似乎有点问题。。。

原创小脚本,希望能对你有所帮助!

(•̀ᴗ•́)و ̑̑点赞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值