import cv2
import os
import xml.etree.ElementTree as ET
# 创建画图的函数
def draw_image_annotations(img_path, xml_path, save_dir):
img = cv2.imread(img_path)
tree = ET.parse(xml_path)
root = tree.getroot()
for obj in root.findall('object'):
name = obj.find('name').text
bbox = obj.find('bndbox')
xmin = int(bbox.find('xmin').text)
ymin = int(bbox.find('ymin').text)
xmax = int(bbox.find('xmax').text)
ymax = int(bbox.find('ymax').text)
cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 255, 0), 2)
cv2.putText(img, name, (xmin, ymin-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36,255,12), 2)
# 保存图片
save_path = os.path.join(save_dir, os.path.basename(img_path))
cv2.imwrite(save_path, img)
# 你的目录
dir_path = './'
# 创建保存的目录
save_dir = os.path.join(dir_path, 'drawImage')
os.makedirs(save_dir, exist_ok=True)
# 获取图片和标注文件
img_dir = os.path.join(dir_path, 'JPEGImages')
xml_dir = os.path.join(dir_path, 'Annotations')
# 文件名(不带扩展名)
file_names = [name.split('.')[0] for name in os.listdir(img_dir)]
for file_name in file_names:
img_path = os.path.join(img_dir, file_name+'.jpg')
xml_path = os.path.join(xml_dir, file_name+'.xml')
draw_image_annotations(img_path, xml_path, save_dir)