使⽤python读取xml⽂件批量⽣成ground-truth标注图⽚
⽬标检测中,在对⽐⾃⼰算法的检测效果时,需要和标注的真实值进⾏对⽐。在⽹上到的⼤部分功能是⼀样的,只不过不完全符合画出真实标注的训练图⽚。
import cv2
import numpy as np
import xml.dom.minidom
import os
import argparse
def main():
# JPG⽂件的地址
img_path = 'D:/code/yolov3-master/data/img/'
# XML⽂件的地址
anno_path = 'D:/code/yolov3-master/data/xml/'
# 存结果的⽂件夹
cut_path = 'D:/code/yolov3-master/data/yl/'
# 获取⽂件夹中的⽂件
imagelist = os.listdir(img_path)
for image in imagelist:
image_pre, ext = os.path.splitext(image)
img_file = img_path + image
# 读取图⽚
img = cv2.imread(img_file)
xml_file = anno_path + image_pre + '.xml'
# 打开xml⽂档
DOMTree = xml.dom.minidom.parse(xml_file)
# 得到⽂档元素对象
collection = DOMTree.documentElement
# 得到标签名为object的信息
objects = ElementsByTagName("object")
for object in objects:
# print("start")
# 每个object中得到⼦标签名为name的信息
namelist = ElementsByTagName('name')
# 通过此语句得到具体的某个name的值
objectname = namelist[0].childNodes[0].data
bndbox = ElementsByTagName('bndbox')[0]
xmin = ElementsByTagName('xmin')[0]
xmin_data = xmin.childNodes[0].data
ymin = ElementsByTagName('ymin')[0]
ymin_data = ymin.childNodes[0].data
xmax = ElementsByTagName('xmax')[0]
xmax_data = xmax.childNodes[0].data
ymax = ElementsByTagName('ymax')[0]
ymax_data = ymax.childNodes[0].data
xmin = int(xmin_data)
xmax = int(xmax_data)
ymin = int(ymin_data)
ymax = int(ymax_data)
# img_cut = img[ymin:ymax, xmin:xmax, :] # 截取框住的⽬标
# cv2.imwrite(cut_path + 'cut_img_{}.jpg'.format(image_pre), img)
python处理xml文件cv2.putText(img, objectname, (xmin, ymin), cv2.FONT_HERSHEY_COMPLEX, 0.7, (0, 255, 0), thickness=2) cv2.imwrite(cut_path + '{}.jpg'.format(image_pre), img)
if __name__ == '__main__':
main()
参考⽂章
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论