You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图像Resize后如何调整labelImg生成的对应.xml标注文件适配训练?

适配Resize后图像的XML标注调整方案

核心实现逻辑非常简单:先获取原始图像的宽高和Resize后新图像的宽高,分别计算宽、高维度的缩放比例,再将原始标注中所有目标框的坐标按对应比例换算,同时更新XML文件中的图像尺寸信息即可。

所需依赖

仅需安装Python图片处理库Pillow:
pip install pillow

完整可运行脚本

import os
import xml.etree.ElementTree as ET
from PIL import Image

# 请根据你的实际路径修改以下参数
ORIGINAL_IMG_DIR = "替换为原始未Resize的图像存放文件夹路径"
RESIZED_IMG_DIR = "替换为Resize后的新图像存放文件夹路径"
OLD_XML_DIR = "替换为原始XML标注存放文件夹路径"
NEW_XML_DIR = "替换为调整后新XML的输出文件夹路径"

# 自动创建输出文件夹
os.makedirs(NEW_XML_DIR, exist_ok=True)

# 遍历所有标注文件
for xml_file in os.listdir(OLD_XML_DIR):
    if not xml_file.endswith(".xml"):
        continue
    # 读取原始XML文件
    tree = ET.parse(os.path.join(OLD_XML_DIR, xml_file))
    root = tree.getroot()
    
    # 获取对应图像文件名(默认标注与图像文件名仅后缀不同)
    img_filename = root.find("filename").text
    # 读取原始图像尺寸
    orig_img = Image.open(os.path.join(ORIGINAL_IMG_DIR, img_filename))
    orig_w, orig_h = orig_img.size
    # 读取Resize后新图像尺寸
    new_img = Image.open(os.path.join(RESIZED_IMG_DIR, img_filename))
    new_w, new_h = new_img.size
    
    # 计算宽高缩放比例
    scale_w = new_w / orig_w
    scale_h = new_h / orig_h
    
    # 更新XML中的图像尺寸信息
    size_node = root.find("size")
    size_node.find("width").text = str(new_w)
    size_node.find("height").text = str(new_h)
    
    # 遍历所有标注目标,更新框坐标
    for obj in root.iter("object"):
        bndbox = obj.find("bndbox")
        xmin = int(round(float(bndbox.find("xmin").text) * scale_w))
        ymin = int(round(float(bndbox.find("ymin").text) * scale_h))
        xmax = int(round(float(bndbox.find("xmax").text) * scale_w))
        ymax = int(round(float(bndbox.find("ymax").text) * scale_h))
        
        bndbox.find("xmin").text = str(xmin)
        bndbox.find("ymin").text = str(ymin)
        bndbox.find("xmax").text = str(xmax)
        bndbox.find("ymax").text = str(ymax)
    
    # 保存调整后的新XML文件
    tree.write(os.path.join(NEW_XML_DIR, xml_file))

注意事项

  • 脚本默认图像与标注文件名完全一致、仅后缀不同,如果你的命名规则有差异,需要自行调整文件名匹配逻辑
  • 坐标计算时用round取整,避免出现浮点型坐标导致TensorFlow Object API或标注工具读取报错
  • 运行完成后建议随机抽3-5组结果用labelImg打开核验,确认标注框和目标对齐无误后再投入训练
  • 如果原始图像已经删除,可以直接读取原始XML中<size>节点下的width和height值作为原始宽高,无需加载原始图像

内容的提问来源于stack exchange,提问作者Andrii Zelenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:00:04