将目标的边界框绘制在图像中,并标出真实标签
#将目标检测的xml标签中目标绘制在图像中
from future import division
import os
import xml.dom.minidom
import cv2
def read_xml(ImgPath, AnnoPath, Savepath):
imagelist = os.listdir(AnnoPath)
for image in imagelist:
image_pre, ext = os.path.splitext(image)
imgfile = ImgPath + ‘/’ + image_pre + ‘.jpg’
xmlfile = AnnoPath + ‘/’ + image_pre + ‘.xml’
im = cv2.imread(imgfile)
DomTree = xml.dom.minidom.parse(xmlfile)
annotation = DomTree.documentElement
filenamelist = annotation.getElementsByTagName(‘filename’)
filename = filenamelist[0].childNodes[0].data
objectlist = annotation.getElementsByTagName(‘object’)
for objects in objectlist:
namelist = objects.getElementsByTagName(‘name’)
objectname = namelist[0].childNodes[0].data
bndbox = objects.getElementsByTagName(‘bndbox’)
for box in bndbox:
try:
x1_list = box.getElementsByTagName('xmin')
x1 = int(x1_list[0].childNodes[0].data)
y1_list = box.getElementsByTagName('ymin')
y1 = int(y1_list[0].childNodes[0].data)
x2_list = box.getElementsByTagName('xmax')
x2 = int(x2_list[0].childNodes[0].data)
y2_list = box.getElementsByTagName('ymax')
y2 = int(y2_list[0].childNodes[0].data)
minX = x1
minY = y1
maxX = x2
maxY = y2
#蓝色框
color = (255, 0, 0)
cv2.rectangle(im,(minX,minY),(maxX,maxY),color,2)
path = Savepath + '/' + image_pre + '.jpg'
font = cv2.FONT_HERSHEY_SIMPLEX
#红色字体
cv2.putText(im, objectname, (minX,minY - 7), font, 0.5, (0, 0, 255), 1)
cv2.imwrite(path, im)
except Exception as e:
print(e)
#依次为图片路径、xml文件的路径、输出图片的存放路径
read_xml(‘E:/jupyter/RSOD/RSOD_overpass’,‘E:/jupyter/RSOD/xml’,‘E:/jupyter/RSOD/overpass’)