目标检测脚本 | 根据xml文件在原图上显示边界框并保存

简介: 目标检测脚本 | 根据xml文件在原图上显示边界框并保存

执行以下代码需要安装opencv库:


conda install opencv


参考代码:


"""
目的:将原图片(img)与其xml(xml),合成为打标记的图片(labelled),矩形框标记用红色即可
已有:(1)原图片文件夹(imgs_path),(2)xml文件夹(xmls_path)
思路:
    step1: 读取(原图片文件夹中的)一张图片
    step2: 读取(xmls_path)该图片的xml文件,并获取其矩形框的两个对角顶点的位置
    step3: 依据矩形框顶点坐标,在该图片中画出该矩形框
    step4: 图片另存为'原文件名'+'_labelled',存在‘lablled’文件夹中
"""
import os
import cv2 as cv
import xml.etree.ElementTree as ET
import numpy as np
# 读取中文路径
# def cv_imread(filePath):
#     cv_img = cv.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)
#     # imdecode读取的是rgb,如果后续需要opencv处理的话,需要转换成bgr,转换后图片颜色会变化
#     # cv_img=cv2.cvtColor(cv_img,cv2.COLOR_RGB2BGR)
#     return cv_img
def xml_jpg2labelled(imgs_path, xmls_path, labelled_path):
    imgs_list = os.listdir(imgs_path)
    xmls_list = os.listdir(xmls_path)
    nums = len(imgs_list)
    print(imgs_list)
    print(xmls_list)
    for i in range(nums):
        img_path = os.path.join(imgs_path, imgs_list[i])
        xml_path = os.path.join(xmls_path, xmls_list[i])
        img = cv.imread(img_path)
        # img = cv.imread(cv_imread(img_path))
        # print('img:',img)
        labelled = img
        # print('img_path:',img_path)
        # print('xml_path:',xml_path)
        # print('labelled:',labelled)
        root = ET.parse(xml_path).getroot()
        objects = root.findall('object')
        for obj in objects:
            bbox = obj.find('bndbox')
            xmin = int(float(bbox.find('xmin').text.strip()))
            ymin = int(float(bbox.find('ymin').text.strip()))
            xmax = int(float(bbox.find('xmax').text.strip()))
            ymax = int(float(bbox.find('ymax').text.strip()))
            # 标注框的设定, (0, 0, 255)为边界框颜色的设定, 5位边界框的宽度设定
            labelled = cv.rectangle(labelled, (xmin, ymin), (xmax, ymax), (0, 0, 255), 5)
        # print('labelled_path:', labelled_path)
        # print('imgs_list[i]:', imgs_list[i])
        # print('%s_labelled.jpg' % (imgs_list[i].split('.')[0]))
  # 保存图片
        # cv.imwrite('%s%s.jpg' % (labelled_path, imgs_list[i]), labelled)
        cv.imwrite('%s/%s_labelled.jpg' % (labelled_path, imgs_list[i].split('.')[0]), labelled)
        # cv.imshow('labelled', labelled)
        # cv.imshow('origin', origin)
        # cv.waitKey()
if __name__ == '__main__':
  # 注意文件路径不能出现中文,否则容易出错
    imgs_path = 'E:\project\Images'
    xmls_path = 'E:\project\Annotations'
    labelled_path = 'E:\project\label_images'
    xml_jpg2labelled(imgs_path, xmls_path, labelled_path)


参考链接:

https://blog.csdn.net/weixin_40051325/article/details/103891567


目录
相关文章
|
7月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
191 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
280 1
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
980 8
|
XML Android开发 数据格式
Eclipse 创建 XML 文件
Eclipse 创建 XML 文件
192 2
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
162 3
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
561 0
|
XML 存储 Web App开发
查看 XML 文件
查看 XML 文件
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
XML Java 数据格式
java创建xml文件内容
java创建xml文件内容
142 0
|
XML Java 数据格式
java解析xml文件内容
java解析xml文件内容
146 0