根据xml文件的类别信息和坐标信息,将图像对应的类别区域抠出来,并存入文件夹中。

本文介绍了一种基于XML文件信息的自动切图脚本。该脚本能够读取XML文件中的对象类别和边界框坐标,从原始图片中裁剪出指定的对象区域,并按类别存放于不同的文件夹中。这一过程有助于提高标注数据集的质量审核效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"""
根据xml文件的类别信息和位置坐标信息,将对应的类别对象crop出来,并存入到以类别信息命名的文件夹中
目的:便于标图后重新审核标图质量。

输入:包含图片的文件夹imgs,包含xml信息的文件夹xmls
输出:文件夹crop_img,crop_img下的以标签类别命名的子文件夹,以及crop的子图
"""

import cv2
import os
import xml.etree.ElementTree as ET

xml_file_dir = "./xmls"
img_file_dir = "./imgs"

xmls = os.listdir(xml_file_dir)
for xml in xmls:
    # 解析xml
    tree = ET.parse(os.path.join(xml_file_dir,xml))
    root = tree.getroot()

    img_name = root.find("filename").text
    img = cv2.imread(os.path.join(img_file_dir,img_name))

    objects = root.findall('object')
    for i, obj in enumerate(objects):
        id = 0
        label = obj.find('name').text
        if label == ":":
            label = "colon"

        bb = obj.find('bndbox')
        xmin = bb.find('xmin').text
        ymin = bb.find('ymin').text
        xmax = bb.find('xmax').text
        ymax = bb.find('ymax').text

        # 保存crop img
        crop_img = img[int(ymin):int(ymax), int(xmin):int(xmax)]

        # crop_img_name的命名方式:img_name+"_"+label+"_"+i
        crop_img_name = os.path.splitext(img_name)[0] + "_" + label+"_"+str(i)+".jpg"

        crop_img_save_dir = os.path.join(os.getcwd(),"crop_img",label)
        print(crop_img_save_dir)
        if os.path.exists(crop_img_save_dir) == 0:
            os.makedirs(crop_img_save_dir)
        crop_img_save_path = os.path.join(crop_img_save_dir, crop_img_name)
        cv2.imwrite(crop_img_save_path,crop_img)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值