Python根据xml文件在原图上标注目标
import cv2
import xml.etree.ElementTree as ET
import os
img_path = 'JPEGImages'
xml_path = 'Annotations'
save_path = 'results'
colors = {'truck': (0, 0, 255), 'car': (0, 255, 0), 'people': (255, 0, 0)}
img_names = os.listdir(img_path)
for img_name in img_names:
img = os.path.join(img_path, img_name)
img = cv2.imread(img)
xml_name = img_name.split('.')[0]
xml = os.path.join(xml_path, xml_name + '.xml')
xml_file = ET.parse(xml)
root = xml_file.getroot()
objects = root.findall('object')
for obj in objects:
obj_name = obj.find('name').text.strip()
xmin = int(float(obj.find('bndbox').find('xmin').text.strip()))
xmax = int(float(obj.find('bndbox').find('xmax').text.strip()))
ymin = int(float(obj.find('bndbox').find('ymin').text.strip()))
ymax = int(float(obj.find('bndbox').find('ymax').text.strip()))
cv2.rectangle(img, (xmin, ymax), (xmax, ymin), colors[obj_name])
cv2.putText(img, obj_name, (xmin, ymin-5), fontFace=cv2.CALIB_SAME_FOCAL_LENGTH,
fontScale=0.5, color=colors[obj_name])
cv2.imshow('result', img)
cv2.waitKey(1000)
cv2.imwrite(os.path.join(save_path, img_name +'+.jpg'), img)