检测:根据xml文件在图片上绘制框图

目标检测:根据xml文件在图片上绘制框图


代码是参考的多方资源,并非所有都是原创,如有侵权行为,请及时告知。

编译环境

  1. python 3.6
  2. opencv-python
  3. xml
    我使用的是anaconda 在安装相应的程序时会自动配置相应的库。

文件结构

主要文件
1.origin_img:放置图片和xml文件
在这里插入图片描述
2.test:用于保存处理后的图片
3.show_img:主程序

代码解析

import cv2
import os
from xml.etree import ElementTree as ET
import random
import shutil


def read_(path):
    # 检测的类别需要修改,根据自己检测的类别名修改即可
    voc_name_list = ['hat']
    with open(r'./del.txt', 'w') as writer:
        root_dir = path
        dir_path = os.path.join(root_dir, "JPEGImages")
        xml_dir_path = os.path.join(root_dir, "Annotations")
        files = os.listdir(xml_dir_path)
        random.shuffle(files)
        for name in files:
            xml_file = os.path.join(xml_dir_path, name)
            tree = ET.parse(xml_file)
            root = tree.getroot()
            filename = root.find("filename").text
            writer.writelines(filename.split('.')[0] + ' ')
            image_file_path = os.path.join(dir_path, filename)
            writer.writelines(image_file_path)
            for obj in root.findall('object'):
                label = obj.find('name').text
                bbox = obj.find("bndbox")
                xmin = int(float(bbox.find("xmin").text))
                ymin = int(float(bbox.find("ymin").text))
                xmax = int(float(bbox.find("xmax").text))
                ymax = int(float(bbox.find("ymax").text))
                if xmin < 0:
                    xmin =0
                if ymin < 0:
                    ymin =0

                writer.writelines(" {},{},{},{},{}".format(xmin, ymin, xmax, ymax, voc_name_list.index(label)))
            writer.writelines('\n')

def draw_result(info_):
    if os.path.exists('./test'): shutil.rmtree('./test')
    if not os.path.exists('./test'):
        os.mkdir('./test')
    # 检测的类别需要修改,根据自己检测的类别名修改即可
    voc_name_list = ['hat']
    ii = 0
    bbox_nums = []
    for i in info_:
        ii += 1
        x = i.split(' ')
        img = cv2.imread(x[1], 1)
        for j in range(len(x[2:])):
            bbox_ = x[j+2]
            bbox = bbox_.split(',')[:-1]
            bbox_nums.append(bbox)
            # 读取框图
            # print("-"*30)
            # print(len(bbox_nums))
            # print("-"*30)
            x1 = int(bbox[0])
            y1 = int(bbox[1])
            x2 = int(bbox[2])
            y2 = int(bbox[3])
            labels = bbox_.split(',')[-1]
            cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
            lineType = cv2.LINE_AA if cv2.__version__ > '3' else cv2.CV_AA
            cv2.putText(
                img, '%s' % voc_name_list[int(float(labels))],
                (x1, y1), cv2.FONT_HERSHEY_TRIPLEX, 0.8,
                (0, 255, 0), 2, 8)
        if img is None:
            print(x[0])
        cv2.imwrite('test/{}.jpg'.format(x[0]), img)


if __name__ == '__main__':
    # 存放img和xml的文件夹
    path = './origin_img/'
    read_(path)

    with open(r'./del.txt', 'r') as writer:
        txt = writer.readlines()
    txt1 = []
    for x in txt:
        if x == '\n':
            continue
        else:
            txt1.append(x.strip())
    draw_result(txt1)

(1) 只需要修改代码中的voc_name_list即可。
(2) 如果想要统计图片中的GT框的数量,可以把# 读取框图下面的三行注释代码取消注释。

结果展示

在这里插入图片描述
在这里插入图片描述如果本文给您带来方便的话,请持续关注我,会不定期的推送文章。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
### 回答1: 红绿灯检测图片数据xml文件是用于存储红绿灯位置和属性信息的一种文件格式。它通常由计算机视觉算法生成,用于训练和测试红绿灯检测模型。 在xml文件中,首先会包含图片的基本信息,比如图片的宽度、高度和通道数等。然后,每个红绿灯实例都会被描述为一个矩形框,用四个值表示矩形框的左上角和右下角的坐标。这些矩形框将围绕着红绿灯的位置。 除了矩形框,xml文件中还包括其他与红绿灯相关的属性信息。例如,每个红绿灯可能具有一个类别标签,用于表示该红绿灯是红灯还是绿灯。此外,还可以添加一些其他属性,如红绿灯的形状、大小、颜色等。 通过使用这些xml文件,我们可以训练红绿灯检测模型。在训练过程中,模型将根据xml文件中提供的红绿灯位置和属性信息来学习如何准确地检测红绿灯。而在测试过程中,我们可以使用xml文件中的矩形框来标识红绿灯的位置,并对其进行分类。 总的来说,红绿灯检测图片数据xml文件是一种用于存储红绿灯位置和属性信息的文件格式,它是进行红绿灯检测训练和测试的重要数据源。通过使用这个xml文件,我们能够有效地训练和测试红绿灯检测模型,从而提高交通安全性能。 ### 回答2: 红绿灯检测是指通过处理红绿灯图片数据,并对其进行分析和处理,以确定其中是否存在红绿灯的位置及状态。XML文件是一种标记语言,用于存储和描述数据,以便在不同平台和程序之间进行数据交换和共享。 对于红绿灯检测图片数据,XML文件通常用于存储多个图像的相关信息。在XML文件中,可以将每个图像的路径、大小、位置和标签等信息存储起来。这些信息对于训练红绿灯检测模型和评估检测算法的性能非常重要。 XML文件中的每个图像通常包含一系列的标注框(bounding box),用于表示红绿灯的位置。每个标注框由四个坐标值组成,分别表示框的左上角和右下角的坐标。此外,还可以在每个标注框中添加一些属性,如红绿灯的颜色、信号状态(红灯、绿灯、黄灯)等。 红绿灯检测图片数据的XML文件还可以包含其他信息,如图像的拍摄时间、相机参数、光照条件等。这些信息可以帮助研究人员或开发者更好地理解红绿灯检测数据集的特征和条件,从而提高算法的鲁棒性和泛化能力。 总之,红绿灯检测图片数据的XML文件对于提供图像的标注信息、辅助算法的训练和评估具有重要作用,是实现红绿灯检测算法的必要数据之一。通过分析和处理XML文件中的信息,可以更好地进行红绿灯检测算法的研究和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆珝

您的打赏是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值