提取文件夹中所有xml文件中的数据到txt(为人脸识别级联器使用的txt做准备)

【知识点】pugixml框架提取多个相同节点内容、遍历文件夹、保存到txt。

xml文件由labelImg.exe软件标定图像生成。此博客把xml文件内容提取到txt中,为人脸识别opencv_annotation.exe、opencv_createsamples.exe、opencv_traincascade.exe服务

所有xml放到一个文件夹中,代码功能:遍历此文件夹,提取xml内容,保存到txt

#include"pugixml\pugixml.hpp"
#include<iostream>
#include<fstream> //检索文件夹
#include<io.h> //存储到txt

using namespace pugi;
using namespace std;

int main()
{
    ofstream OpenFile("file.txt");

    //目标文件夹路径
    string inPath = "D:/XMLtoTXT/xmlDataTrain/*.xml";//遍历文件夹下的所有.xml文件
    //用于查找的句柄
    long long handle=0;//这个地方需要特别注意,win10用户必须用long long 类型,win7可以用long类型
    struct _finddata_t fileinfo; //存储检索到的文件信息
    //第一次查找
    handle = _findfirst(inPath.c_str(), &fileinfo);
    if (handle == -1)    return -1;
    do
    {
        //printf("%s\n", fileinfo.name);//找到的文件的文件名
        xml_document doc;
        string path(fileinfo.name);//char[]类型转string,为了方便字符串连接
        string path = "./xmlDataTrain/"+ path;
        doc.load_file(path.c_str());//c_str(),string转char[]

        xml_node nodes = doc.child("annotation");
        OpenFile << nodes.child("path").text().get(); //输出到txt
        int i = 0; //框选的缺陷个数,即object标签个数
        for (xml_node node = nodes.first_child(); node; node = node.next_sibling())
        {
            string name = node.name();
            if (name == "object")
            {
                i++;
            }
        }
        OpenFile << " " << i; //输出到txt
        for (xml_node node = nodes.first_child(); node; node = node.next_sibling())
        {
            string name = node.name();
            if (name == "object")
            {
                int x = node.child("bndbox").child("xmin").text().as_int();
                int y = node.child("bndbox").child("ymin").text().as_int();
                int x2 = node.child("bndbox").child("xmax").text().as_int();
                int y2 = node.child("bndbox").child("ymax").text().as_int();
                int w = x2 - x;
                int h = y2 - y;
                OpenFile << " " << x << " " << y << " " << w << " " << h; //输出到txt
            }
        }
        OpenFile << endl;    

    } while (!_findnext(handle, &fileinfo));
    OpenFile.close(); //关闭txt
    _findclose(handle);

    return 0;
}

原文地址:https://www.cnblogs.com/xixixing/p/12358053.html

时间: 2024-10-11 04:35:12

提取文件夹中所有xml文件中的数据到txt(为人脸识别级联器使用的txt做准备)的相关文章

Java web 项目读取src或者tomcat下class文件夹下的xml文件或者properties文件

//生成一个文件对象: File file = new File(getClass().getClassLoader().getResource("test.xml").getPath()); //直接得到一个输入流: InputStream in = getClass().getClassLoader().getResourceAsStream("test.xml"); //在当前线程获取--这种方法不大稳定 //String path = Thread.curr

解析xml文件,遍历输出xml文件中的所有节点, 最终模仿实现struts2框架

程序结构:src文件夹下存放xml文件 该文件内容: <?xml version="1.0" encoding="UTF-8"?> <mystruts> <actions name="myaction1" namespace="/"> <action name="userdao" class="org.action.UserDAO"> &l

关于Struts2中struts.xml文件分层问题

没事折腾struts2,遇到异常,浪费好长时间,于是干脆把所有可能的异常都给跑一遍,来个痛快的. 文件的结构 WEB-INF |------configs |-------struts-common.xml |-------struts.xml |------web.xml 遇到的异常: WARNING: Could not find action or result: /Pro_struts2/common/login!preLogin There is no Action mapped fo

对于JavaWeb项目中web.xml文件中Servlet的基本配置有一些小记录写在这里,并做参考,有新的及时更新

对于JavaWeb项目中web.xml文件中Servlet的基本配置有一些小记录写在这里,并做参考,有新的及时更新 <?xml version="1.0" encoding="UTF-8"?> <web-app> <!-- 在创建web项目时,若是系统自动生成,上面会有一串配置信息,因为不影响大局,这里没有列出--> <!-- 流程: 当在网页中使用/login时,发现不是网页,则会在web.xml找寻对应的名字,由url-

maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

perl怎么拷贝一个文件到另一个文件夹中或者怎么拷贝文件夹到另一个文件夹

File::Copy 主要提供了copy和move函数#!/usr/bin/perluse strict; use warnings; use File::Copy; my $filein=$ARGV[0]; my $fileout=$ARGV[1];#copy($file1, $dir1);将文件$file1复制到文件夹$dir1中:copy($filein,$fileout) or die "copy $filein to $fileout failed\n"; #move($fi

报表XML导出rtf格式,结果在浏览器中打开XML文件。用360浏览器下载rtf文件打开后出现Authentication failed 问题

报表XML导出rtf格式,结果在浏览器中打开XML文件.用360浏览器下载rtf文件打开后出现Authentication failed 问题 直接上问题图: 问题描述:在Oracle EBS中执行"资源事务处理 XML"请求,选择输出rtf格式,完成后查看输出,却在浏览器中打开了XML文件.        提示:需要检查一下是否有对应的模板文件和模板定义有效时间.        解决方案:1. 查看日志. 从中可以看出出错原因,以及模板代码.2. 添加Oracle XML Publi

[转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件

原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件 折腾: C#中如何在右下角添加提示窗口,用于显示打开文件和文件夹 的过程中,需要实现,点击对应LinkLabel后,调用资源管理器,打开对应的文件夹. [

用Java实现将多级文件夹下的所有文件统一放到一个文件夹中

每次下了电影(男生懂得呦),每部电影都放在一个单独的文件夹里,看的时候很是不方便啊,一直重复着进入文件夹.后退,再进.再退的操作,而手动把这些电影全部复制出来又太繁琐.因此为了解决这个问题,用IO写了一个小工具. 以下代码只实现了把多级文件夹下的所有文件复制到一个文件夹中,如果需要指定复制文件的格式,可以在1111处添加一个判断.如果需要同时删除原文件夹可以在添加一个递归删除的方法. package Bao; import java.io.BufferedInputStream;import j