【极简】c++ 使用 opencv FileStorage、FileNode 读取 YAML 文件中参数设置
中代码的给参数变量赋值部分还可以使用。因此 YAML 文件中需要在首行定义。其运行输出如下,与第一种方法一致。
·
1. YAML 文件示例
创建一个 test.yaml
文件,内容如下:
%YAML:1.0
param_bool: 0
param_int: 42
param_float: 3.14
param_string: "hello"
2. c++ 使用 opencv 读取 YAML
2.1. 使用 cv::FileStorage 直接读取
创建 test.cpp
并输入以下内容
#include <cstdio>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
// 读取 YAML 文件
FileStorage fs("test.yaml", FileStorage::READ);
// 检查文件是否打开成功
if (!fs.isOpened()) {
fprintf(stderr, "Failed to open YAML file.\n");
return -1;
}
// 定义参数变量
bool param_bool = 1;
int param_int = 0;
float param_float = 0.0;
string param_string = "test";
// 如果参数名存在, 且值不为空才读取 YAML 给参数变量赋值
if (!fs["param_bool"].isNone() && !fs["param_bool"].empty()) {
fs["param_bool"] >> param_bool;
}
if (!fs["param_int"].isNone() && !fs["param_int"].empty()) {
fs["param_int"] >> param_int;
}
if (!fs["param_float"].isNone() && !fs["param_float"].empty()) {
fs["param_float"] >> param_float;
}
if (!fs["param_string"].isNone() && !fs["param_string"].empty()) {
fs["param_string"] >> param_string;
}
// 输出参数设置
printf("param_bool: %d \n", param_bool);
printf("param_int: %d \n", param_int);
printf("param_float: %f \n", param_float);
printf("param_string: %s \n", param_string.c_str());
// 关闭文件
fs.release();
return 0;
}
其运行输出如下
param_bool: 0
param_int: 42
param_float: 3.140000
param_string: hello
2.2. 使用 cv::FileNode 读取
2.1
中代码的给参数变量赋值部分还可以使用 cv::FileNode
方法
// 如果参数名存在, 且值不为空才给参数变量赋值
cv::FileNode node;
node = fs["param_bool"];
if (!node.isNone() && !node.empty()) {
node >> param_bool;
}
node = fs["param_int"];
if (!node.isNone() && !node.empty()) {
node >> param_int;
}
node = fs["param_float"];
if (!node.isNone() && !node.empty()) {
node >> param_float;
}
node = fs["param_string"];
if (!node.isNone() && !node.empty()) {
node >> param_string;
}
其运行输出如下,与第一种方法一致
param_bool: 0
param_int: 42
param_float: 3.140000
param_string: hello
2.3. CMakeLists.txt
上述代码所需的 CMakeLists.txt
如下:
cmake_minimum_required(VERSION 3.10)
project(test)
find_package(OpenCV REQUIRED)
add_executable(run test.cpp)
target_link_libraries(run ${OpenCV_LIBS})
3. YAML 的补充说明
cv::FileStorage
支持 YAML 1.0
和 YAML 1.1
语法规范。
因此 YAML 文件中需要在首行定义 %YAML:1.0
或 %YAML:1.1
,否则将会报错。
更多推荐
所有评论(0)