【下面的 voc 格式的内容可以修改】
转换代码原文链接:
https://blog.csdn.net/xiaobumi123/article/details/103822083#commentBox

图片来源:https://blog.csdn.net/qq_29762941/article/details/80797790#commentBox
转换代码:
import cv2
import os
xml_head = '''<annotation>
<folder>JPEGImages</folder>
<filename>{}</filename>
<path>/home/joyce/workplace/change_xml_test/images/{}</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>{}</width>
<height>{}</height>
<depth>{}</depth>
</size>
<segmented>0</segmented>
'''
xml_obj = '''
<object>
<name>{}</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>{}</xmin>
<ymin>{}</ymin>
<xmax>{}</xmax>
<ymax>{}</ymax>
</bndbox>
</object>
'''
xml_end = '''
</annotation>'''
labels = ['mineral']#label for datasets
cnt = 0
txt_path=os.path.join('/home/joyce/workplace/change_xml_test/imagestxt/')#yolo存放txt的文件目录
image_path=os.path.join('/home/joyce/workplace/change_xml_test/images/')#存放图片的文件目录
path=os.path.join('/home/joyce/workplace/change_xml_test/Annotations/')#存放生成xml的文件目录
for(root,dirname,files) in os.walk(image_path):#遍历图片文件夹
for ft in files:
ftxt=ft.replace('jpg','txt')#ft是图片名字+扩展名,将jpg和txt替换
fxml=ft.replace('jpg','xml')
xml_path=path+fxml
obj = ''
img = cv2.imread(root+ft)
img_h,img_w = img.shape[0],img.shape[1]
head = xml_head.format(str(ft),str(ft),str(img_w),str(img_h),3)
with open(txt_path+ftxt,'r') as f:#读取对应txt文件内容
for line in f.readlines():
yolo_datas = line.strip().split(' ')
label = int(float(yolo_datas[0].strip()))
center_x = round(float(str(yolo_datas[1]).strip()) * img_w)
center_y = round(float(str(yolo_datas[2]).strip()) * img_h)
bbox_width = round(float(str(yolo_datas[3]).strip()) * img_w)
bbox_height = round(float(str(yolo_datas[4]).strip()) * img_h)
xmin = str(int(center_x - bbox_width / 2 ))
ymin = str(int(center_y - bbox_height / 2))
xmax = str(int(center_x + bbox_width / 2))
ymax = str(int(center_y + bbox_height / 2))
obj += xml_obj.format(labels[label],xmin,ymin,xmax,ymax)
with open(xml_path,'w') as f_xml:
f_xml.write(head+obj+xml_end)
# cnt += 1
# print(cnt)
批量修改文件中的某个内容:
【当时是原本 txt 的类别编号错了,需要统一改成 0 才能进行转换 xml 的操作,下面就是实现代码】
原文链接:https://www.cnblogs.com/Leechg/p/5446258.html
import os
path="/home/joyce/workplace/change_xml_test/imagestxt/"
for root,dirs,files in os.walk(path):
for name in files:
#print name
if name.endswith(".txt"):
#print root,dirs,name
filename=root+"/"+name
f=open(filename,"r")
filecontent=""
line=f.readline()
while line:
yolo_datas = line.strip().split(' ')
l=line.replace(str((yolo_datas[0]).strip()),"0")
filecontent=filecontent+l
line=f.readline()
f.close()
f2=open(filename,"w")
f2.writelines(filecontent)
f2.close()