ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

window10 解析yml文件

2021-05-08 10:02:17  阅读:222  来源: 互联网

标签:std fs string FileStorage cv sName 解析 yml window10


一、解析文件依赖程序

Config.h 

 1 #pragma once
 2 #include<iostream>
 3 #include<vector>
 4 #include<opencv2\opencv.hpp> 
 5 class Config
 6 {
 7 public:
 8     Config();
 9     ~Config();
10 
11 public:
12 
13     std::vector<std::string> GetString_Vec(cv::FileStorage fs, std::string sName);
14     std::vector<cv::Point> GetPoint_Vec(cv::FileStorage fs, std::string sName);
15     std::vector<int> GetNum_Vec(cv::FileStorage fs, std::string sName);
16     cv::Point GetPoint(cv::FileStorage fs, std::string sName);
17     std::string GetString(cv::FileStorage fs, std::string sName);
18     int GetNum(cv::FileStorage fs, std::string sName);
19 };
View Code

Config.cpp

 1 #include "Config.h"
 2 
 3 Config::Config()
 4 {
 5 
 6 }
 7 Config::~Config()
 8 {
 9 
10 }
11 cv::Point Config::GetPoint(cv::FileStorage fs, std::string sName)
12 {
13     cv::Point poi;
14     cv::FileNode map_node = fs[sName];
15     map_node >> poi;
16     return poi;
17 }
18 std::string Config::GetString(cv::FileStorage fs, std::string sName)
19 {
20     std::string str;
21     cv::FileNode map_node = fs[sName];
22     map_node >> str;
23     return str;
24 }
25 int Config::GetNum(cv::FileStorage fs, std::string sName)
26 {
27     int iNum;
28     cv::FileNode map_node = fs[sName];
29     map_node >> iNum;
30     return iNum;
31 }
32 std::vector<std::string> Config::GetString_Vec(cv::FileStorage fs, std::string sName)
33 {
34     std::vector<std::string> Str_vec;
35     cv::FileNode n = fs[sName];
36     cv::FileNodeIterator it = n.begin(), it_end = n.end();
37     for (; it != it_end; ++it)
38         Str_vec.push_back((std::string)*it);
39     return Str_vec;
40 }
41 std::vector<cv::Point> Config::GetPoint_Vec(cv::FileStorage fs, std::string sName)
42 {
43     std::vector<cv::Point> Point_vec;
44     cv::FileNode n = fs[sName];
45     std::cout << n.size() << std::endl;
46     for (size_t i = 0; i < n.size(); ++i)
47     {
48         cv::Point2f poi;
49         n[i] >> poi;
50         Point_vec.push_back(poi);
51     }
52     return Point_vec;
53 }
54 std::vector<int> Config::GetNum_Vec(cv::FileStorage fs, std::string sName)
55 {
56     std::vector<int> Num_vec;
57     cv::FileNode n = fs[sName];
58     cv::FileNodeIterator it = n.begin(), it_end = n.end(); // 遍历节点
59     for (; it != it_end; ++it)
60         Num_vec.push_back((int)*it);
61     return Num_vec;
62 }
View Code

二、解析案例

案例依赖的结构体信息

 1 struct strYml
 2 {
 3     const std::string sWidth = "sWidth";
 4 
 5     const std::string calibPt = "sCalibPt";
 6 
 7     const std::string sPts = "sPts";
 8 
 9     const std::string sET = "sET";
10 
11     const std::string strCom = "strCom";
12 
13     const std::string sModeName = "sModeName";
14 
15     const std::string sModePath = "sModePath";
16 
17     const std::string sModeImg = "sModeImg";
18 
19 };
20 
21 struct outYmlStr
22 {
23     int iWidth; //像素宽度
24 
25     cv::Point calibPt; //标定点
26 
27     std::vector<cv::Point>pts; //偏移量
28 };
29 
30 struct paraSet
31 {
32     double exploreTime;  //曝光时间
33 
34     std::string strCom; //串口端口号
35 
36     std::string sModeFileName;  //模板名称
37 
38     std::string sModePath; //模板文件保存路径
39 
40     std::string sModeImgPath; //模板图像名称
41 };
View Code

Read YML

 1 void sConfigExpalain(std::string sConfigPath, paraSet& paraSets, outYmlStr& modeStruct)
 2 {
 3     strYml sYmlConfig;
 4     FileStorage fs(sConfigPath, FileStorage::READ); //FileStorage::READ 读或写
 5     paraSets.exploreTime = sConfig.GetNum(fs, sYmlConfig.sET);
 6     paraSets.sModeFileName = sConfig.GetString(fs, sYmlConfig.sModeName);
 7     paraSets.sModeImgPath = sConfig.GetString(fs, sYmlConfig.sModeImg);
 8     paraSets.sModePath = sConfig.GetString(fs, sYmlConfig.sModePath);
 9     paraSets.strCom = sConfig.GetString(fs, sYmlConfig.strCom);
10 
11     //读取模板图像
12     cv::Mat mMode = cv::imread(paraSets.sModeImgPath);
13     std::string sModeYml = paraSets.sModePath;
14     FileStorage fR(sModeYml, FileStorage::READ); //FileStorage::READ 读或写
15     modeStruct.calibPt = sConfig.GetPoint(fR, sYmlConfig.calibPt);
16     modeStruct.iWidth = sConfig.GetNum(fR, sYmlConfig.sWidth);
17     modeStruct.pts = sConfig.GetPoint_Vec(fR, sYmlConfig.sPts);
18 
19     
20 }
View Code

Write YML

Write依赖的函数

 1 template<typename T> void WArrayToYml(cv::FileStorage fs, std::string sName, T& a)
 2 {
 3     fs << sName << "[";
 4     for (int i = 0; i < a.size(); i++)
 5     {
 6         fs << a[i];
 7     }
 8 
 9     fs << "]";
10 
11 }
12 //写元素
13 template<typename T> void  WValueToYml(cv::FileStorage fs, std::string sName, T& a)
14 {
15     fs << sName << a;
16 }
View Code

案例

1 void bWriteModeStruct(std::string sModePath,const outYmlStr& modeStruct)
2 {
3     FileStorage fs(sModePath, FileStorage::WRITE); //FileStorage::READ 读或写
4     strYml outStr;
5     WValueToYml(fs, outStr.sWidth, modeStruct.iWidth);
6     WValueToYml(fs, outStr.calibPt, modeStruct.calibPt);
7     WArrayToYml(fs, outStr.sPts, modeStruct.pts);
8 }
View Code

 

以上程序基于opencv可实现windows平台下文件的解析。

 

标签:std,fs,string,FileStorage,cv,sName,解析,yml,window10
来源: https://www.cnblogs.com/yzj-notes/p/14743676.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有