数据集xml文件格式
<annotation>
<folder>cr</folder>
<filename>crazing_10.jpg</filename>
<source>
<database>NEU-DET</database>
</source>
<size>
<width>200</width>
<height>200</height>
<depth>1</depth>
</size>
<segmented>0</segmented>
<object>
<name>crazing</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>60</xmin>
<ymin>20</ymin>
<xmax>194</xmax>
<ymax>69</ymax>
</bndbox>
</object>
<object>
<name>crazing</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>9</xmin>
<ymin>84</ymin>
<xmax>197</xmax>
<ymax>198</ymax>
</bndbox>
</object>
</annotation>
import numpy as np
import os
import cv2
import xml.etree.ElementTree as ET
imgs_path = './NEU-DET/IMAGES/'
xmls_path = './NEU-DET/ANNOTATIONS/'
img_save_path = './NEU-DET/augemen_image/'
xml_save_path = './NEU-DET/augemen_annotations/'
for images in os.listdir(imgs_path):
# rotate_img
oriname = images.rstrip('.jpg')
img_path = os.path.join(imgs_path, oriname + '.jpg')
img = cv2.imread(img_path)
number = oriname.rsplit('_', 1)
number[1] = 300 + int(number[1])
H, W, C = img.shape
# 旋转中心,逆时针旋转90度,最后一个是缩放因子
M = cv2.getRotationMatrix2D((W/2, H/2), 90, 1)
dst = cv2.warpAffine(img, M, (W, H))
cv2.imwrite(img_save_path + number[0] + '_' + str(number[1]) + '.jpg', dst)
# rotate_xml
xml_path = os.path.join(xmls_path, oriname + '.xml')
tree = ET.parse(xml_path)
root = tree.getroot()
filename = root.find('filename').text
size = root.find('size')
w = int(size.find('width').text)
h = int(size.find('height').text)
for object in root.findall('object'):
object_name = object.find('name').text
Xmin = int(object.find('bndbox').find('xmin').text)
Ymin = int(object.find('bndbox').find('ymin').text)
Xmax = int(object.find('bndbox').find('xmax').text)
Ymax = int(object.find('bndbox').find('ymax').text)
# 修改属性
w = Xmax - Xmin
h = Ymax - Ymin
object.find('bndbox').find('xmin').text = str(Ymin)
object.find('bndbox').find('ymin').text = str(W - Xmax)
object.find('bndbox').find('xmax').text = str(Ymax)
object.find('bndbox').find('ymax').text = str(W - Xmin)
size.find('width').text = str(H)
size.find('height').text = str(W)
root.find('filename').text = number[0] + '_' + str(number[1]) + '.jpg'
tree.write(xml_save_path + number[0] + '_' + str(number[1]) + '.xml')