使用python读取xml文件批量生成ground-truth标注图片

2023-11-03

目标检测中,在对比自己算法的检测效果时,需要和标注的真实值进行对比。在网上找到的大部分功能是一样的,只不过不完全符合画出真实标注的训练图片。

import cv2
import numpy as np

import xml.dom.minidom
import os
import argparse


def main():
    # JPG文件的地址
    img_path = 'D:/code/yolov3-master/data/img/'
    # XML文件的地址
    anno_path = 'D:/code/yolov3-master/data/xml/'
    # 存结果的文件夹
    cut_path = 'D:/code/yolov3-master/data/yl/'
    # 获取文件夹中的文件
    imagelist = os.listdir(img_path)

    for image in imagelist:
        image_pre, ext = os.path.splitext(image)
        img_file = img_path + image
        # 读取图片
        img = cv2.imread(img_file)
        xml_file = anno_path + image_pre + '.xml'
        # 打开xml文档
        DOMTree = xml.dom.minidom.parse(xml_file)
        # 得到文档元素对象
        collection = DOMTree.documentElement
        # 得到标签名为object的信息
        objects = collection.getElementsByTagName("object")

        for object in objects:
            # print("start")
            # 每个object中得到子标签名为name的信息
            namelist = object.getElementsByTagName('name')
            # 通过此语句得到具体的某个name的值
            objectname = namelist[0].childNodes[0].data
            bndbox = object.getElementsByTagName('bndbox')[0]
            xmin = bndbox.getElementsByTagName('xmin')[0]
            xmin_data = xmin.childNodes[0].data
            ymin = bndbox.getElementsByTagName('ymin')[0]
            ymin_data = ymin.childNodes[0].data
            xmax = bndbox.getElementsByTagName('xmax')[0]
            xmax_data = xmax.childNodes[0].data
            ymax = bndbox.getElementsByTagName('ymax')[0]
            ymax_data = ymax.childNodes[0].data
            xmin = int(xmin_data)
            xmax = int(xmax_data)
            ymin = int(ymin_data)
            ymax = int(ymax_data)
            # img_cut = img[ymin:ymax, xmin:xmax, :]  # 截取框住的目标
            # cv2.imwrite(cut_path + 'cut_img_{}.jpg'.format(image_pre), img)
            cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 255, 0), thickness=2)  # 生成原始值
            cv2.putText(img, objectname, (xmin, ymin), cv2.FONT_HERSHEY_COMPLEX, 0.7, (0, 255, 0), thickness=2)
            cv2.imwrite(cut_path + '{}.jpg'.format(image_pre), img)


if __name__ == '__main__':
    main()

 参考文章

https://blog.csdn.net/weixin_43778744/article/details/104229713

https://blog.csdn.net/qq_40279508/article/details/81204989

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用python读取xml文件批量生成ground-truth标注图片 的相关文章

随机推荐

  • 区块链用到的技术

    区块链的核心技术 加密算法 P2P 共识算法 智能合约 分布式存储 加密算法 目的 保证数据的安全 防止数据被非法窃取 验证身份 应用于数字签名或者数字证书 在不暴露身份的前提下知道 我是我 手段 对称加密 加密和解密使用的密钥相同 非对称
  • 数据结构与算法学习笔记(第一章)

    配套材料 大话数据结构 主 中国大学MOOC浙江大学 数据结构 补充 介绍 数据结构是相互之间存在一种或多种特定关系的数据元素集合 数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间关系和操作等相关问题的学科 为什么要学习数
  • Linux进程、系统性能和计划任务

    成功不易 加倍努力 1 进程和内存管理 1 1 什么是进程 1 2 进程结构 1 3 进程相关概念 1 3 1 物理地址空间和虚拟地址空间 1 3 2 用户和内核空间 1 3 3 C代码和内存布局之间的对应关系 1 3 4 进程使用内存问题
  • 一个非常有用的函数——COALESCE

    很多人知道ISNULL函数 但是很少人知道Coalesce函数 人们会无意中使用到Coalesce函数 并且发现它比ISNULL更加强大 其实到目前为止 这个函数的确非常有用 本文主要讲解其中的一些基本使用 首先看看联机丛书的简要定义 返回
  • java对象创建过程(jvm)

    虚拟机遇到一条new指令时 开始进行对象的创建 1 检查这个指令的参数是否能在常量池中定位到一个类的符号引用 true 则继续下一步 false 说明这个类还没有被定义 会抛出ClassNotFoundException 2 检查这个符号引
  • centos7自定义镜像运行Flask

    一 centos7自定义镜像 1 支持22端口的sftp连接 参考链接 Centos7创建支持ssh服务器的docker容器 2 支持flask 上一步保存的镜像名为 centos7 dn 0119 docker run d p 8023
  • TCP通信过程详解以及tcp长连接和短连接

    1 TCP连接 当网络通信时采用TCP协议时 在真正的读写操作之前 server与client之间必须建立一个连接 当读写操作完成后 双方不再需要这个连接 时它们可以释放这个连接 连接的建立是需要三次握手的 而释放则需要4次挥手 所以说每个
  • Swing001——入门简介

    一 Swing简介 Swing是什么 Swing 是新一代的图形界面工具 特点 轻量级组件 采用纯 Java 实现 跨平台支持 不再依赖于本地平台的图形界面 更多的图形界面组件 可以开发出美观的图形界面程序 二 Swing 容器 创建图形用
  • word2vec

    Author kangbingbing Email kangb93 126 com Datawhale word2vec简介 Word2vec是Google实现word embedding的一种具体的方式 因为速度快效果好 而广为人知 而W
  • 一些好用的vscode插件

    一直用的sublime text 喜欢它的轻巧 不过最近试了下vscode 发现还是蛮中意的 插件生态丰富而且配置挺人性化 另外一些shortcuts功能确实提高编辑效率 缺点是如果安装太多插件 内存会飙高些 这里记下目前用的一些觉得不错的
  • 何为智能指针以及QT中的智能指针

    目的 对于指针的使用中有两个导致软件崩溃的问题 一是忘记释放动态申请的内存 二是指针指向的内存被释放 为了解决这个问题 出现了智能指针 效果 智能指针其实是一个类 在这个类的构造函数和析构函数实现以下功能 当有一个指针指向对象A时 计数器加
  • printf、sprintf、fprintf的区别

    printf sprintf fprintf的区别 int printf const char format int fprtintf FILE stream const char format int sprintf char str c
  • chromecast投屏_利用谷歌Chromecast,3个简单的步骤教你将手机投屏到电视上

    无论是在线观看电影 视频通话 展示度假照片还是在电视上玩游戏 把你的安卓 Android 手机的屏幕内容投屏到电视机上都很简单 放过你的家人和朋友们吧 与其让他们挤在你的Android手机或平板电脑的小屏幕上前浏览照片或观看最新的疫情播报视
  • python文件读写函数总结

    1 python读取csv文件 usr bin python coding UTF 8 df pd read csv filepath usecols func name para value df t df fillna value 对空
  • 线性回归算法及案例

    线性回归 寻找 一种能预测的趋势 回归问题的条件 前提 1 收集的数据 2 假设的模型 即一个函数 这个函数里含有未知的参数 通过学习 可以估计出参数 然后利用这个模型去预测 分类新的数据 案例 from sklearn datasets
  • DRBD分布式存储解决方案实战

    一 DRBD分布式存储解决方案 1 DRBD简介 DRBD的全称为 Distributed Replicated Block Device DRBD 分布式块设备复制 DRBD是由内核模块和相关脚本而构成 用以构建高可用性 HA 的集群 其
  • Cas5.3.2 服务端 自定义登入界面

    第一 项目整体结构 自定义页面涉及资源全部存放再src main resources 文件夹目录下 目录 含义 services 配置自定义登入网站模板 static 静态文件目录 用于存放js css代码的 templates 模板文件目
  • Linux mount 命令

    mount 命令用来挂载文件系统 其基本命令格式为 mount t type o options device dirdevice 指定要挂载的设备 比如磁盘 光驱等 dir 指定把文件系统挂载到哪个目录 type 指定挂载的文件系统类型
  • 使用Python,OpenCV执行视觉显著性检测(Visual Saliency Detection)

    使用Python OpenCV执行视觉显著性检测 Visual Saliency Detection 这篇博客将介绍如何使用Python OpenCV执行显著性检测 这是一个应用图像处理和计算机视觉算法来自动定位图像中最 显著 区域的过程
  • 使用python读取xml文件批量生成ground-truth标注图片

    目标检测中 在对比自己算法的检测效果时 需要和标注的真实值进行对比 在网上找到的大部分功能是一样的 只不过不完全符合画出真实标注的训练图片 import cv2 import numpy as np import xml dom minid