原因
获取每个目标框的图片并保存,方便查看有没有标错类别,文件名可以追溯回原图
代码
import xml.dom.minidom
import os
import cv2
import glob
from tqdm import tqdm
def read_xml(xml_path):
dom = xml.dom.minidom.parse(xml_path)
root = dom.documentElement
objects = root.getElementsByTagName("object")
return objects
# 遍历指定目录,显示目录下的所有文件名
def CropImage4File(filepath):
jsonpath_list = glob.glob(filepath)
for jsonfile in tqdm(jsonpath_list):
objects = read_xml(jsonfile)
imgfile = jsonfile.replace(".xml", ".jpg").replace("Annotations","JPEGImages")
dest = imgfile.split('\\')[-1:]
im = cv2.imread(imgfile)
count = -1
for object in objects:
count += 1
label = object.getElementsByTagName('name')[0].childNodes[0].data
os.makedirs("./data/result/" + label,exist_ok=True)
destpath = "./data/result/" + label + "/" + str(count) + "_" + "_".join(dest)
print(imgfile)
x1 = int(object.getElementsByTagName('xmin')[0].childNodes[0].data)
y1 = int(object.getElementsByTagName('ymin')[0].childNodes[0].data)
x2 = int(object.getElementsByTagName('xmax')[0].childNodes[0].data)
y2 = int(object.getElementsByTagName('ymax')[0].childNodes[0].data)
# if x1 > x2:
# x1, x2 = x2, x1
# if y1 > y2:
# y1, y2 = y2, y1
cropImg = im[y1:y2, x1:x2] # 裁剪图像
cv2.imwrite(destpath, cropImg) # 写入图像路径
if __name__ == '__main__':
filepath = r'C:\data\Annotations\*.xml'
CropImage4File(filepath)