目标检测xml矩形框截取

原因

获取每个目标框的图片并保存,方便查看有没有标错类别,文件名可以追溯回原图

代码

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值