在voc数据集中如何对数据进行筛选,只选择person类别,分离代码及分离结果可视化

def txt_split(path):
    if os.path.splitext(path)[1] == '.txt':
        f = open(path)  # 打开文件
        for line in f.readlines():
            lines = line.strip().split(" ")
            if len(lines) == 3:
                with open("E:\自定义路径\person.txt", 'a') as w:
                    if lines[-1] == '1':
                        w.write(line)
            else:
                continue
        w.close()
        f.close()  # 关闭文件
        
if __name__ == '__main__':
    path = r"E:\VOCtrainval_11-May-2012\VOCdevkit\VOC2012\ImageSets\Main\person_trainval - 副本.txt"
    out = txt_split(path)

查看图片及图片中的标签框,转载于源链接

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
import cv2
import matplotlib.pyplot as plt
from math import sqrt as sqrt

# 需要检查的数据
sets=[('2012', 'person')]
# 需要检查的类别
classes = ['person']
# 输入分辨率
input_size = 320

if __name__ == '__main__':
    VOCRoot = 'E:/xunlei/VOCtrainval_11-May-2012/VOCdevkit'
    # GT框宽高统计
    width = []
    height = []

    for year, image_set in sets:
        for line in open(VOCRoot + '/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)):
            image_id, value = line.split()
            if value != '1':
                continue
            # 图片的路径
            img_path = 'E:/xunlei/VOCtrainval_11-May-2012/VOCdevkit/VOC%s/JPEGImages/%s.jpg'%(year, image_id)
            # 这张图片的XML标注路径
            label_file = open('E:/xunlei/VOCtrainval_11-May-2012/VOCdevkit/VOC%s/Annotations/%s.xml' % (year, image_id))
            tree = ET.parse(label_file)
            root = tree.getroot()
            size = root.find('size')
            img_w = int(size.find('width').text)  # 原始图片的width
            img_h = int(size.find('height').text) # 原始图片的height
            img = cv2.imread(img_path)
            for obj in root.iter('object'):
                difficult = obj.find('difficult').text
                cls = obj.find('name').text
                # 如果标注不是需要的类别或者标注为difficult,就忽略
                if cls not in classes or int(difficult) == 1:
                    continue
                cls_id = classes.index(cls)

                xmlbox = obj.find('bndbox')
                xmin = int(xmlbox.find('xmin').text)
                ymin = int(xmlbox.find('ymin').text)
                xmax = int(xmlbox.find('xmax').text)
                ymax = int(xmlbox.find('ymax').text)
                w = xmax - xmin
                h = ymax - ymin

                img = cv2.rectangle(img, (xmin, ymin), (xmax, ymax), (0, 255, 0), 2)
                w_change = (w / img_w) * input_size
                h_change = (h / img_h) * input_size
                s = w_change * h_change # 得到了GT框面积
                width.append(sqrt(s))
                height.append(w_change / h_change)
            print(img_path)
            cv2.imshow('result', img)
            cv2.waitKey(0)

    plt.plot(width, height, 'ro')
    plt.show()

结果展示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值