IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 从VOC数据集中把boundingbox截取出来 -> 正文阅读

[人工智能]从VOC数据集中把boundingbox截取出来

最近由于项目需要想把Object Detection数据集中的bounding box抠出来(这里其实是想偷个懒,本来应该是将segmentation扣取,后面发现bounding box不行,只能换成segmentation,这是后话了)
但是发现这种通用性这么广的数据集居然网上没用现成直接可用的代码,没办法,只能自行写。
好了,废话不多说,直接上代码吧

import os
import cv2
import xml.etree.ElementTree as ET
from tqdm import tqdm

classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat",
            "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person",
            "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
# 这里的Ori_Path表示原始VOC数据集的位置,需要自行更改
Ori_Path = './VOC2012/'
# 这里的Save_Path表示把boundingbox分割之后保存的图像,也是需要自行更改的
Save_Path = './Cut_image/'

# 生成每个类别的文件夹
def make_class_Dir():
    for cls in classes:
        path = Save_Path + cls
        if not os.path.exists(path):
            os.mkdir(path)

# 定义一个boundingbox切割的函数,把boundingbox区域分割
def image_cut(path, bbox, save_path):
    img = cv2.imread(path, flags=cv2.IMREAD_COLOR)
    cut_image = img[bbox[1]:bbox[1]+bbox[3], bbox[0]:bbox[0]+bbox[2]]
    cv2.imwrite(save_path, cut_image)

# 从xml文件中读取boundingbox的具体信息
def Get_bbox_from_xml(xml_path):
    global xmin, ymin, xmax, ymax
    etree = ET.parse(xml_path)
    root = etree.getroot()
    for filename in root.iter('filename'):
        img_name = filename.text
        img_path = Ori_Path + 'JPEGImages/' + img_name
    print(img_path)
    for obj in root.iter('object'):
        for cls in obj.iter('name'):
            save_path = Save_Path + cls.text + '/' + img_name
            # 从每一个object中分别找到xmin,ymin,xmax,ymax
            for position in obj.iter(('xmin')):
                xmin = int(float(position.text))
            for position in obj.iter(('ymin')):
                ymin = int(float(position.text))
            for position in obj.iter(('xmax')):
                xmax = int(float(position.text))
            for position in obj.iter(('ymax')):
                ymax = int(float(position.text))
            image_cut(img_path, (xmin, ymin, xmax, ymax), save_path)

if __name__ == '__main__':
    make_class_Dir()
    这里的path表示VOC2012数据集中的放xml文件的目录
    path = './VOC2012/Annotations/'
    xml_files = os.listdir(path)
    for xml in tqdm(xml_files):
        xml_path = path + xml
        # print(xml_path)
        # xxx = xml.dom.minidom.parse(xml_path)
        Get_bbox_from_xml(xml_path)

直接运行上面的代码就可以了,注意一下,上面找xmin, ymin, xmax, ymax的地方有一个坑,就是VOC2012的数据集中不同年份标注的xmin, ymin, xmax, ymax顺序是不一样,注意不要直接想当然是xmin, ymin, xmax, ymax的顺序(这是我在网上看的别人其他人时发现的问题)。

这是2007开头xml的写法,是xmin、ymin、xmax、ymax的顺序

<object>
		<name>tvmonitor</name>
		<pose>Frontal</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>251</xmin>
			<ymin>28</ymin>
			<xmax>475</xmax>
			<ymax>267</ymax>
		</bndbox>
	</object>

这是2009开头xml的写法,是xmax、xmin、ymax、ymin的顺序

<object>
		<name>car</name>
		<bndbox>
			<xmax>458</xmax>
			<xmin>260</xmin>
			<ymax>92</ymax>
			<ymin>29</ymin>
		</bndbox>
		<difficult>0</difficult>
		<occluded>0</occluded>
		<pose>Right</pose>
		<truncated>0</truncated>
	</object>
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:22:47  更:2022-04-01 23:24:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 0:58:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码