日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件

發布時間:2025/3/21 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于配置文件的使用,除了本文的yaml的方法,經常使用的還有proto的方法,請參考我另一篇博客:proto相關用法:方法2.。


c++中如果要使用YAML,需要安裝yaml-cpp庫,安裝完成后使用時還需要包含下面的頭文件:

#include "yaml-cpp/yaml.h"

關于安裝以及語法,可以參考下面兩篇博客
C++ 解析yaml文件的使用方法:https://blog.csdn.net/sunlin972913894/article/details/103038082

c++ 開發中利用yaml-cpp讀寫yaml配置文件:https://cloud.tencent.com/developer/article/1423468


1. 讀取解析yaml文件的參數

下面舉一個C++使用yaml文件配置參數的實例:

// 函數的參數是yaml文件的路徑 bool LoadConfigFile(const std::string &file_name) {YAML::Node config = YAML::LoadFile(file_name);if (!config) {std::cout << "Open config File:" << file_name << " failed.";return false;}if (!config["transform"]) {std::cout << "Open config File:" << file_name << " has no transform.";return false;}if (config["transform"]["translation"]) {// 讀取yaml文件中的transform下的translation的x的值x_ = config["transform"]["translation"]["x"].as<float>();} else {std::cout << "config File:" << file_name << " has no transform:translation.";return false;}return true; }

以下是yaml文件,上面的函數是示范了讀取下面yaml文件中的transform下的translation的x的值,其他值的讀取也是同理。

%YAML:1.0 --- header:seq: 0frame_id: aaastamp:secs: 0nsecs: 0 transform:translation:x: 1.2799999713897705e+00y: 2.5614136457443237e-01z: 5.7490050792694092e-01euler:yaw: 2.5469255447387695e+00pitch: -2.7205293178558350e+00roll: 3.1672728061676025e-01

2. 給yaml文件中寫入數據:

如果你要創建一個新的“mapping”(鍵/值對),可以使用特殊符號大括號{。一旦開始創建,就可以為其添加元素,最終以}結束一個mapping。一旦完成創建一個mapping,需要按順序輸入條目名以及對應的值。

如果你要創建一個新的“sequence”(一系列未命名的條目),可以使用特殊符號中括號[。一旦開始創建,就可以為其添加元素,最終以]結束一個sequence。一旦完成創建一個sequence,只需要一個接一個地輸入元素即可,直到sequence結束。

有時候mapping或sequence的所有數據在一行,有時候每個元素一行。這并不是自動格式化造成的,而是由于mapping的起始字符{:和},sequence的起始字符[:和]的變化造成的。這個特點只對YAML格式的輸出有意義,如果輸出文件是XML格式,那么這些細微的差別將會被忽略,mapping與sequence的存儲將不會有區別。

一旦完成寫工作,便可以使用成員函數cv::FileStorage::release()關閉文件。

關于{}符號和[]的使用,可以參考:https://blog.csdn.net/learning_tortosie/article/details/97815514,有例子,有截圖,推薦觀看。

c++代碼:

void WriteExtrinsics(const std::string& file_name) {float height = 0, lateral = 0;// 函數的第二個參數READ表示讀取file_namecv::FileStorage fs_in(file_name, cv::FileStorage::READ);// >> height 表示把yaml文件中的對應值賦值給 height_tmpfs_in["location"]["height"] >> height_tmp;fs_in["location"]["lateral"] >> lateral_tmp;fs_in.release(); //cv::FileStorage::release()關閉文件// 函數的第二個參數WRITE表示寫入file_namecv::FileStorage fs_out(file_name,cv::FileStorage::WRITE); // 把 camera_name_寫入camera_namefs_out << "camera_name" << camera_name_;// 下面的大括號{}用法在代碼前介紹過,最終在文件中是不會有大括號的.如果想有大括號,就加個冒號 {:fs_out << "transform"<< "{"<< "translation"<< "{";fs_out << "x" << params_[3]; // std::vector<float> params_;fs_out << "y" << params_[4];fs_out << "z" << params_[5] << "}";fs_out << "euler"<< "{";fs_out << "yaw" << params_[0];fs_out << "pitch" << params_[1];fs_out << "roll" << params_[2] << "}"<< "}";fs_out << "location"<< "{";fs_out << "height" << height_tmp;fs_out << "lateral" << params_[4] << "}";// matrix_是3x3的Mat,cv::Mat matrix_;,寫在yaml文件中就寫成了一排[,,,,,,,]fs_out << "K" << "[:" << matrix_.at<double>(0, 0);fs_out << matrix_.at<double>(0, 1);fs_out << matrix_.at<double>(0, 2);fs_out << matrix_.at<double>(1, 0);fs_out << matrix_.at<double>(1, 1);fs_out << matrix_.at<double>(1, 2);fs_out << matrix_.at<double>(2, 0);fs_out << matrix_.at<double>(2, 1);fs_out << matrix_.at<double>(2, 2);fs_out << "]";fs_out.release(); }

上面的代碼生成的yaml文件如下:

camera_name: "aaa" transform:translation:x: 1.2799999713897705e+00y: 2.5614136457443237e-01z: 5.7490050792694092e-01euler:yaw: 2.5469255447387695e+00pitch: -2.7205293178558350e+00roll: 3.1672728061676025e-01 location:height: 2.3749005794525146e+00lateral: 2.5614136457443237e-01 K: [1.8756049476213811e+03, 0.0, 9.4676147405235554e+02, 0.0, 1.8718221660532543e+03, 5.6894635478118289e+02, 0.0, 0.0, 1.0]

總結

以上是生活随笔為你收集整理的【C++】42.使用YAML文件进行参数配置、读取与生成YAML文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 图书馆的女友动漫在线观看 | 亚洲一级片| 亚洲另类av| 精品成人一区二区三区久久精品 | 美女流白浆视频 | 国产又大又硬又粗 | 在线免费看av | 老女人毛片50一60岁 | 中文字幕日韩在线视频 | h片在线免费看 | 日韩插插插| 国产日韩欧美中文字幕 | 男人天堂手机在线观看 | 精品国产青草久久久久96 | 欧美偷拍另类 | 国产高清第一页 | 美女被c出水 | 日本久久免费 | 国内自拍av | 风流少妇 | 内射国产内射夫妻免费频道 | 亚洲av永久无码国产精品久久 | 91麻豆产精品久久久久久夏晴子 | 肥臀浪妇太爽了快点再快点 | 欧美日本 | 懂色av懂色av粉嫩av分享吧 | 狂野欧美性猛交xxxx巴西 | 欧美一区二区免费电影 | 亚洲一卡二卡三卡四卡 | 国产午夜福利一区二区 | 日韩天堂视频 | av网站在线免费观看 | wwww欧美| 精品无码久久久久 | 青青成人网 | 欧美嫩草 | 午夜粉色视频 | 欧日韩在线| 中文字幕――色哟哟 | 国产视频在线观看一区 | a级片免费播放 | 俄罗斯嫩小性bbwbbw | 无码国产69精品久久久久同性 | 久久天天躁狠狠躁夜夜躁 | 国产午夜福利一区二区 | 麻豆精品在线播放 | 超黄网站在线观看 | 中文字幕在线日本 | 日本大奶少妇 | 久色视频| 国产a久久麻豆入口 | 午夜视频在线免费观看 | 亚洲美女一区二区三区 | 青青草国产 | 欧美做受高潮中文字幕 | 特级毛片爽www免费版 | 黄色成人在线视频 | 性av在线| 九九天堂 | 天天影视插插插 | gav在线 | 18成人在线观看 | 日韩视频在线一区二区 | 精品一区二区久久久久久久网站 | 欧美中文字幕一区二区三区 | 久久激情网| 国语对白 | 尹人久久 | 午夜福利啪啪片 | 国产精品久久久不卡 | 日韩av影片在线观看 | 色噜噜日韩精品欧美一区二区 | 97精品一区二区三区 | 国产嫩草视频 | 开心色99| 91色综合| 亚洲欧洲成人在线 | 亚洲国产日韩欧美一区二区三区 | 日韩三级视频在线观看 | 色淫湿视频 | 亚洲午夜色 | 日本xxxx裸体xxxx | 蜜臀久久精品久久久久 | 999国产| 一区二区av | 欧美一区在线观看视频 | 四季av在线一区二区三区 | 夜色一区二区 | 色吧综合网 | 日韩一级成人 | 日本大尺度做爰呻吟 | 韩国中文字幕在线观看 | 四虎网站在线观看 | 操出白浆视频 | 国产午夜在线观看 | 毛片视频播放 | 中文字幕一区二区不卡 | 在线午夜av | 免费成人在线视频观看 |