#include<iostream>
#include <fstream>
#include<string>
#include <sstream>
#include<vector>
//打开xml文件需要加载的头文件
#include "tinystr.h"
#include "tinyxml.h"
using namespace std;
struct WHSize
{
int width;
int height;
};
//box参数结构体
struct BoxSize
{
int xMin;
int yMin;
int xMax;
int yMax;
};
void writeFile(string &address, vector<vector<double>>&data)
{
ofstream fout(address);
if (!fout.is_open())
{
cout << "open file error!" << endl;
}
for (int i = 0; i < data.size(); i++)
{
for (int k = 0; k < data[i].size(); k++)
{
fout << data[i][k] << " ";
}
fout << endl;
}
data.clear();
fout.close();
}
bool txt2xml(string file_txt, string file_xml, string file_names) //file_names类型文件路径 file_txt 文件 转换file_xml路径
{
vector<string>stringnames;
string TypeNamePath = file_names;
ifstream namesin;
namesin.open(TypeNamePath, ios::in);//打开一个file_txt
if (!namesin.is_open())
{
cout << "Can not find target file." << endl;
return -1;
}
string namesBuff;
while (!namesin.eof())
{
namesin >> namesBuff;
if (namesin.fail())
{
break;
}
stringnames.push_back(namesBuff);//存储类型vector
}
namesin.close();
string FilePath = file_txt;
ifstream in;
in.open(FilePath, ios::in);//打开一个file_txt
if (!in.is_open())
{
cout << "Can not find target file." << endl;
return -1;
}
string buff;//按空格读取数据string类型
int num = 0;
vector<double>nvec;
vector<vector<double>>nresult;
while (!in.eof())
{
in >> buff;
double n = atof(buff.c_str());
cout << n << endl; nvec.push_back(n);
num++;
if (num % 5 == 0)
{
nresult.push_back(nvec);//二维数组保存数据
nvec.clear();
}
}
in.close();
//x y w h
//公式 s= x*2000*2 z= w*2000 xmax=(s+z)/2 xmin=xmax-z
//同理 s=y*2000*2 z=h*2000 ymax=(s+z)/2 ymin=ymax-z
//确定有几个object
int n = nresult.size();
//
const char * xmlFile = file_xml.c_str();
TiXmlDocument *doc = new TiXmlDocument; //xml文档指针
//文档格式声明
TiXmlDeclaration *decl = new TiXmlDeclaration("1.0", "", "");
doc->LinkEndChild(decl); //写入文档
TiXmlElement *RootElement = new TiXmlElement("annotation");//根元素
//
TiXmlElement *folderElement = new TiXmlElement("folder");//图片在的文件夹 固定
RootElement->LinkEndChild(folderElement);
TiXmlText *folderContent = new TiXmlText("datas");
folderElement->LinkEndChild(folderContent);
//
TiXmlElement *filenameElement = new TiXmlElement("filename");//图片的名字 循环读取
RootElement->LinkEndChild(filenameElement);
TiXmlText *filenameContent = new TiXmlText("0.jpg");
filenameElement->LinkEndChild(filenameContent);
//
TiXmlElement *pathElement = new TiXmlElement("path");
RootElement->LinkEndChild(pathElement);
TiXmlText *pathContent = new TiXmlText("D:\\datas\\0.jpg");//不能含有中文 循环读取
pathElement->LinkEndChild(pathContent);
//
TiXmlElement *sourceElement = new TiXmlElement("source");//source
//
TiXmlElement *databaseElement = new TiXmlElement("database");
sourceElement->LinkEndChild(databaseElement);
TiXmlText *databaseContent = new TiXmlText("Unknown");//不能含有中文
databaseElement->LinkEndChild(databaseContent);
//
TiXmlElement *sizeElement = new TiXmlElement("size");//size
//
TiXmlElement *widthElement = new TiXmlElement("width");
sizeElement->LinkEndChild(widthElement);
TiXmlText *widthContent = new TiXmlText("2000");//不能含有中文
widthElement->LinkEndChild(widthContent);
//
TiXmlElement *heightElement = new TiXmlElement("height");
sizeElement->LinkEndChild(heightElement);
TiXmlText *heightContent = new TiXmlText("2000");//不能含有中文
heightElement->LinkEndChild(heightContent);
//
TiXmlElement *depthElement = new TiXmlElement("depth");
sizeElement->LinkEndChild(depthElement);
TiXmlText *depthContent = new TiXmlText("1");//不能含有中文
depthElement->LinkEndChild(depthContent);
//
TiXmlElement *segmentedElement = new TiXmlElement("segmented");
TiXmlText *segmentedContent = new TiXmlText("0");
segmentedElement->LinkEndChild(segmentedContent);
//
RootElement->LinkEndChild(sourceElement);//父节点写入文档
RootElement->LinkEndChild(sizeElement);//父节点写入文档
RootElement->LinkEndChild(segmentedElement);//父节点写入文档
//
for (int i = 0; i < n; i++)
{
//读取nresult 转换数据->xml
//type x y w h
// 0 1 2 3 4
//公式 s= x*2000*2 z= w*2000 xmax=(s+z)/2 xmin=xmax-z
//同理 s=y*2000*2 z=h*2000 ymax=(s+z)/2 ymin=ymax-z
string type = stringnames[nresult[i][0]];
int sx = nresult[i][1]*2000*2;//x
int zw = nresult[i][3]*2000;//w
string xmaxval = to_string((sx + zw) / 2);
string xminval = to_string((sx + zw) / 2 - zw);
int sy = nresult[i][2] * 2000 * 2;//x
int zh = nresult[i][4] * 2000;//w
string ymaxval = to_string((sy + zh) / 2);
string yminval = to_string((sy + zh) / 2 - zh);
//
TiXmlElement *objectElement = new TiXmlElement("object");//object 有几个类型就有几个object
//
TiXmlElement *nameElement = new TiXmlElement("name");
objectElement->LinkEndChild(nameElement);
TiXmlText *nameContent = new TiXmlText(type.c_str());//不能含有中文 类型 判断读取
nameElement->LinkEndChild(nameContent);
//
TiXmlElement *poseElement = new TiXmlElement("pose");
objectElement->LinkEndChild(poseElement);
TiXmlText *poseContent = new TiXmlText("Unspecified");//不能含有中文
poseElement->LinkEndChild(poseContent);
//
TiXmlElement *truncatedElement = new TiXmlElement("truncated");
objectElement->LinkEndChild(truncatedElement);
TiXmlText *truncatedContent = new TiXmlText("0");//不能含有中文
truncatedElement->LinkEndChild(truncatedContent);
//
TiXmlElement *difficultElement = new TiXmlElement("difficult");
objectElement->LinkEndChild(difficultElement);
TiXmlText *difficultContent = new TiXmlText("0");//不能含有中文
difficultElement->LinkEndChild(difficultContent);
//
TiXmlElement *bndboxElement = new TiXmlElement("bndbox");//size 坐标信息 计算后循环写入
//
TiXmlElement *xminElement = new TiXmlElement("xmin");
bndboxElement->LinkEndChild(xminElement);
TiXmlText *xminContent = new TiXmlText(xminval.c_str());//不能含有中文
xminElement->LinkEndChild(xminContent);
//
TiXmlElement *yminElement = new TiXmlElement("ymin");
bndboxElement->LinkEndChild(yminElement);
TiXmlText *yminContent = new TiXmlText(yminval.c_str());//不能含有中文
yminElement->LinkEndChild(yminContent);
//
TiXmlElement *xmaxElement = new TiXmlElement("xmax");
bndboxElement->LinkEndChild(xmaxElement);
TiXmlText *xmaxContent = new TiXmlText(xmaxval.c_str());//不能含有中文
xmaxElement->LinkEndChild(xmaxContent);
//
TiXmlElement *ymaxElement = new TiXmlElement("ymax");
bndboxElement->LinkEndChild(ymaxElement);
TiXmlText *ymaxContent = new TiXmlText(ymaxval.c_str());//不能含有中文
ymaxElement->LinkEndChild(ymaxContent);
//
objectElement->LinkEndChild(bndboxElement);
RootElement->LinkEndChild(objectElement);//父节点写入文档
}
doc->LinkEndChild(RootElement);
doc->SaveFile(xmlFile);
return true;
}
int main() {
vector<string>stringnames;
string TypeNamePath = "D:\\ZZ\\15.jpg";
int pos0 = TypeNamePath.rfind("\\");
int length = pos0 - 0;
std::string tyimg = TypeNamePath.substr(pos0 + 1, TypeNamePath.length());
string rest= TypeNamePath.substr(0, length);
int pos1 = rest.rfind("\\
没有合适的资源?快使用搜索试试~ 我知道了~
yolo中的txt转换成需要的xml
共97个文件
tlog:24个
obj:21个
cpp:11个
需积分: 1 54 下载量 63 浏览量
2020-12-11
15:16:51
上传
评论 1
收藏 24.57MB ZIP 举报
温馨提示
yolo中的txt转换成需要的xml
资源推荐
资源详情
资源评论
收起资源包目录
xmltotxt.zip (97个子文件)
xmltotxt
xmltotxt.VC.db 36.28MB
xmltotxt.sln 2KB
.vs
xmltotxt
v14
.suo 37KB
ConsoleApplication1
tinyxmlparser.cpp 36KB
tinyxml.h 63KB
Դ.cpp 8KB
tinystr.h 8KB
tinystr.cpp 2KB
tinyxml.cpp 37KB
ConsoleApplication1.vcxproj 8KB
ConsoleApplication1.vcxproj.filters 1KB
x64
Release
ConsoleApplication1.log 1KB
Դ.obj 4.79MB
vc140.pdb 2.37MB
tinystr.obj 27KB
tinyxml.obj 243KB
ConsoleA.597CD136.tlog
CL.write.1.tlog 3KB
link.command.1.tlog 2KB
CL.read.1.tlog 48KB
CL.command.1.tlog 4KB
link.write.1.tlog 1KB
ConsoleApplication1.lastbuildstate 205B
link.read.1.tlog 5KB
tinyxmlerror.obj 155KB
tinyxmlparser.obj 203KB
Debug
ConsoleApplication1.log 2KB
Դ.obj 1.45MB
vc140.pdb 2.55MB
tinystr.obj 35KB
tinyxml.obj 331KB
ConsoleA.597CD136.tlog
CL.write.1.tlog 3KB
link.command.1.tlog 2KB
CL.read.1.tlog 49KB
CL.command.1.tlog 4KB
link.write.1.tlog 1KB
ConsoleApplication1.lastbuildstate 203B
link.read.1.tlog 5KB
tinyxmlerror.obj 9KB
vc140.idb 1.28MB
tinyxmlparser.obj 172KB
tinyxmlerror.cpp 2KB
xmltotxt
黄工程序.txt 7KB
tinyxmlparser.cpp 36KB
xmltotxt.vcxproj.filters 1KB
tinyxml.h 63KB
Դ.cpp 8KB
tinystr.h 8KB
源程序.txt 15KB
tinystr.cpp 2KB
tinyxml.cpp 37KB
xml.cpp 7KB
xmltotxt.vcxproj 8KB
x64
Release
Դ.obj 4.79MB
vc140.pdb 2.37MB
tinystr.obj 27KB
tinyxml.obj 243KB
tinyxmlerror.obj 155KB
xmltotxt.log 1KB
xmltotxt.tlog
CL.write.1.tlog 2KB
link.command.1.tlog 2KB
CL.read.1.tlog 48KB
CL.command.1.tlog 4KB
xmltotxt.lastbuildstate 205B
link.write.1.tlog 1KB
link.read.1.tlog 5KB
tinyxmlparser.obj 203KB
Debug
Դ.obj 1.36MB
vc140.pdb 2.61MB
tinystr.obj 35KB
tinyxml.obj 330KB
tinyxmlerror.obj 9KB
xml.obj 939KB
xmltotxt.log 1KB
xmltotxt.tlog
CL.write.1.tlog 3KB
link.command.1.tlog 4KB
CL.read.1.tlog 49KB
CL.command.1.tlog 7KB
xmltotxt.lastbuildstate 203B
link.write.1.tlog 966B
link.read.1.tlog 4KB
vc140.idb 1.33MB
tinyxmlparser.obj 172KB
tinyxmlerror.cpp 2KB
x64
Release
ConsoleApplication1.iobj 1.86MB
xmltotxt.iobj 1.86MB
ConsoleApplication1.ipdb 2.39MB
ConsoleApplication1.exe 101KB
ConsoleApplication1.pdb 2.86MB
xmltotxt.exe 101KB
xmltotxt.pdb 2.88MB
xmltotxt.ipdb 858KB
Debug
ConsoleApplication1.exe 382KB
ConsoleApplication1.pdb 4.29MB
xmltotxt.exe 367KB
xmltotxt.ilk 1.49MB
xmltotxt.pdb 4MB
ConsoleApplication1.ilk 1.28MB
共 97 条
- 1
资源评论
lccxia
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功