c++读取文件之---yaml-cpp使用

实际项目总会遇到有很多超参数的情况,用常规的结构体等无法有效的涵盖所有,为了方便用户进行配置使用,因此使用yaml的方式进行编辑配置,因此去调研使用了yaml-cpp的使用方法。

1、yaml-cpp下载和编译

下载方式很简单,github找到yaml-cpp的repo(yaml-cpp)如下所示:
在这里插入图片描述
从上面下载zip包到电脑的文件夹下,并进行解压:
在这里插入图片描述
打开已安装的cmake界面,配置源码位置编译结果路径,记得要把YAML_BUILD_SHARED_LIBS勾选上,否则后面在自己项目中使用yaml-cpp的时候会出现库缺失的情况。然后直接点击Configure和Generate,不出意外是可以直接生成成功的。
在这里插入图片描述
接着点击cmake-gui上面的open Project直接使用visual studio 2019打开yaml-cpp的源码项目。如果你希望你的lib和dll在Debug/x64下使用,那就配置整个工程的环境为Debug\x64,然后对整个项目重新生成,即可在你的yaml-cpp-master/build/下面生成相对应的lib和dll文件,如下所示:
在这里插入图片描述
以上就是整个yaml-cpp的编译的编译过程。

2、实际项目使用

新建工程cpp-demo,并添加相应的库目录、包含目录、以及链接库名称,具体操作如下所示:

  • 添加相应附加包含目录:
    在这里插入图片描述
  • 添加相应的附加库目录
    在这里插入图片描述
  • 添加链接器
    在这里插入图片描述
    以读取如下文件为例:
flag: 1        
mode: p        
L_top_x: 776 
L_top_y: 529 
R_top_x: 800 
R_top_y: 532 
R_bottom_x: 1786 
R_bottom_y: 952 
L_bottom_x: 752 
L_bottom_y: 1008 
data_path: ./config/detect/1.jpg
save_filepath: ./config/mmdet

需要引入的主要库为:
#include"yaml-cpp/yaml.h"
主要的实现代码如下所示:

#include<iostream>
#include"yaml-cpp/yaml.h"
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main() {std::string yaml_path = "D:/personal/personal/c++/yolo_detect/Config_yolo.yaml";YAML::Node config = YAML::LoadFile(yaml_path);int flag = config["flag"].as<int>();cout << "flag = " << flag << endl;std::string mode = config["mode"].as<string>();cout << "mode = " << mode << endl;std::vector<Point2d> rect;rect.emplace_back(Point2d(config["L_top_x"].as<double>(), config["L_top_y"].as<double>()));rect.emplace_back(Point2d(config["R_top_x"].as<double>(), config["R_top_y"].as<double>()));rect.emplace_back(Point2d(config["R_bottom_x"].as<double>(), config["R_bottom_y"].as<double>()));rect.emplace_back(Point2d(config["L_bottom_x"].as<double>(), config["L_bottom_y"].as<double>()));for (int i = 0; i < rect.size(); i++){cout <<"第"<<i+1<<"点: "<< rect[i].x << " " << rect[i].y << endl;}string video_path = config["data_path"].as<string>();cout << "video_path = " << video_path << endl;string save_path = config["save_filepath"].as<string>();cout << "save_path = " << save_path << endl;return 0;
}

运行结果如下所示:
在这里插入图片描述

3、踩过的坑

  • 使用cmake-gui进行编译的时候,需要勾选YAML_BUILD_SHARED_LIBS,否则在运行demo项目会出现找不到dll的情况
  • 如果出现找不到dll,还有一种可能是dll文件没有加入环境变量或者没有加入到exe运行环境。

参考:
https://blog.csdn.net/briblue/article/details/89515470

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/559.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web安全——DIV CSS基础

DIV CSS基础 一、DIV和CSS样式二、样式表类型2.1 嵌入样式表2.2 外部样式2.3 内联样式 三、注释四、样式选择器组合选择器 五、背景六、边框七、文字属性八、文本属性九、列表十、超链接十一、盒子模型十二、Border 边框margin padding 十三、float 脱离文档流浮动十四、块级元…

nvm安装nodejs-2023年6月29日

nvm安装nodejs-2023年6月29日 cmd命令行&#xff0c;执行如下代码&#xff0c;表示安装最新稳定版本的node,这里默认是国外的node节点服务器 nvm install lts报错的话&#xff0c;找到安装目录&#xff0c;打开settings.txt&#xff0c;添加如下代码 更换node的国内淘宝镜像节…

Selenium教程__使用Select类对象处理下拉框(15)

select标签的下拉框可以使用selenium的 Select模拟下拉框选择操作。 Select需要导入才能使用&#xff0c;导入路径如下 from selenium.webdriver.support.ui import Select 下面以hao123(https://www.hao123.com) 演示下拉框操作 演示代码如下 import time from selenium i…

knife4j 4.1.0(OpenAPI3)实现spring security或shiro权限注解内容显示

前两天写了个knife4j&#xff08;swagger2&#xff09;实现spring security或shiro权限注解内容显示&#xff0c;主要是使用knife4j 2.0.5来实现权限注解内容显示的扩展。 在Spring Boot 3 中只支持OpenAPI3规范&#xff0c;集成knife4j的stater&#xff1a;knife4j-openapi3-…

若隐若现的芯片

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>若隐若现的芯片</title><script src"https://unpkg.co/gsap3/dist/gsap.min.js">…

前端excel文件处理,vue2 、file-saver、xlsx, excel文件生成与excel文件链接数据导出

1、前端excel文件生成 安装插件 npm install file-saver --save如使用TS开发&#xff0c;可安装file-saver的TypeScript类型定义 npm install types/file-saver --save-dev下载文件流 import { saveAs } from file-saver /**** param {*} fileStream // 文件流* param {*} …

No CMAKE_Swift_COMPILER could be found问题解决

编译OpenCV的IOS平台包,出错: CMake Error at CMakeLists.txt:20 (enable_language): No CMAKE_Swift_COMPILER could be found. 出错定位,原因是启用Swift语言时没有找到CMAKE_Swift_COMPILER变量 CMAKE官方文档说明启用Swift语言方法 cmake 3.15开始支持swift 查找swift …

数据库监控与调优【十三】—— LIMIT语句优化

LIMIT语句优化 LIMIT语句使用规则 limit<offset>, <size> offset&#xff1a;返回结果第一行的偏移量&#xff08;想要跳过多少行&#xff09;size&#xff1a;指定返回多少条 举例说明 -- 查询第1页时&#xff0c;花费92ms SELECT * FROM employees LIMIT 0,…

【容灾系统搭建】网络杂谈(1)之容灾系统如何搭建?

涉及知识点 什么是容灾&#xff0c;容灾系统的建设&#xff0c;容灾系统的结构模型&#xff0c;容灾平台。深入了解容灾技术。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可去其主页关注下哈&#xff0c;不胜感激 文章目录 涉及知识点前言1.容灾系统…

ElasticSearch的核心概念简单描述

我正在参加「掘金启航计划」 ES核心概念 ES是面向文档,下面表格是和关系型数据库的对比,一切都是JSON 关系数据库(Mysql)ES数据库(database)索引(indices) 和数据库一样表(tables)types 慢慢会被弃用 7.0已经过时 8.0会彻底废弃行(rows)documents (数据)文档字段(columns)fi…

Navicat连接oracle

1、官网下载oracle instant client客户端&#xff08;版本自选&#xff09; Oracle Instant Client Downloads 下载后解压 2、navicat配置 在工具-> 选项 -> OCI 或环境中&#xff0c;选择在步骤 1 解压目录的 oci.dll 3、重新启动 Navicat 4、配置oracle连接即可 参考…

别再分库分表了,试试TiDB!

什么是NewSQL 传统SQL的问题 升级服务器硬件 数据分片 NoSQL 的问题 优点 缺点 NewSQL 特性 NewSQL 的主要特性 三种SQL的对比 TiDB怎么来的 TiDB社区版和企业版 TIDB核心特性 水平弹性扩展 分布式事务支持 金融级高可用 实时 HTAP 云原生的分布式数据库 高度兼…