使用cv::FileStorage时出错 Can‘t open file: yaml‘ in read mode

1. 使用说明

在做的一个c++工程项目,想加一个配置文件,我发现主要有两种主流的方式,

(1)opencv有cv::FileStorage这样的一个函数可以使用。

(2)也可以使用cpp-yaml GitHub - jbeder/yaml-cpp: A YAML parser and emitter in C++

第一种是opencv自带的库,如果你工程已经依赖opencv库,建议用这种,它支持xml,yaml,json三种配置文件的处理;

第二种是一个开源的yaml项目,需要自己编译一下,使用可参考:CSDN

2. 代码

这里仅介绍cv::FileStorage

直接上代码:

(1)头文件:
cpp 复制代码
#ifndef BOUNDARY_SETTING_H
#define BOUNDARY_SETTING_H

#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/core/utility.hpp>
#include <iostream>
#include <string>

class Setting
{
public:
    int max_width_;
    std::string model_path_;
public:
    void ReadSetting(const cv::FileNode& node);
    void DisplayPara();

// private:
};
#endif
(2)cpp源文件
cpp 复制代码
#include "Setting.hpp"

void Setting::ReadYaml(const cv::FileNode& node)
{    
    node["max_width"] >> max_width_;
    node["model_path"] >> model_path_;
}

void Setting::DisplayPara()
{
    std::cout<<"max_width_:" <<max_width_<<std::endl;
    std::cout<<"model_path:"  <<model_path_<<std::endl;
}
(3)main文件
cpp 复制代码
#include "BoundarySetting.hpp"


int main(int argc,char** argv)
{
    std::shared_ptr<Setting> g_setting = std::make_shared<Setting>();
    std::string strSettingsFile="./Setting.yaml";
    cv::FileStorage fs(strSettingsFile, cv::FileStorage::READ);


    if(!fs.isOpened())
    {
       std::cout << "Failed to open settings file at: " << strSettingsFile << std::endl;
       return 0;
    }
    g_setting->ReadYaml(fs["paras"]);
    fs.release();
    g_setting->DisplayPara();

    return 0;
}

3.YAML文件

%YAML:1.0


PARA:

max_width: 1280

model_path: ""

4. 问题

(1)编译后运行主要遇到了这个错误就是不能打开yaml文件。类似如下:

Can't open file: yaml' in read mode

这个问题主要是因为yaml文件的格式不对,建议先用cv::FileStorage::WRITE生成一个yaml文件,保证格式无误,然后再在上面手动修改或添加参数。

其他的可能遇到的一些问题就是:

(1)yaml文件的相对路径有问题,就用绝对路径,有网友这么说的;

(2)注意读yaml文件后的传参类型

(3)我任务yaml,json,xml 遇到的文件打不开,可能原因是类似的。

相关推荐
兵慌码乱3 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
梦想三三7 天前
OpenCV银行卡数字识别项目(图像预处理与字符分割)
人工智能·opencv·计算机视觉
武子康7 天前
调查研究-180 roboflow/supervision:计算机视觉工程里的“胶水层“,为什么值得关注?
人工智能·opencv·计算机视觉·chatgpt·llm·向量化
m沐沐7 天前
【计算机视觉】OpenCV 模板匹配银行卡数字识别---下
人工智能·python·opencv·计算机视觉·pycharm·numpy
fie88897 天前
SSR / MSR 图像增强
人工智能·opencv·计算机视觉
sali-tec7 天前
C# 基于OpenCv的视觉工作流-章85-包胶不良检测
图像处理·人工智能·opencv·算法·计算机视觉
FL16238631298 天前
[cmake]基于C++使用纯opencv部署ppocrv5v6的onnx模型
开发语言·c++·opencv
2401_885665198 天前
基于OpenCV的模板匹配OCR实战:银行卡与身份证数字识别完整教程
人工智能·python·opencv·计算机视觉·ocr
winfredzhang8 天前
用 MediaPipe 手势数字识别一键打开下载夹里的图片(Python + OpenCV 实战)
人工智能·python·opencv·google·mediapipe
sali-tec9 天前
C# 基于OpenCv的视觉工作流-章84-包胶有无检测
图像处理·人工智能·opencv·算法·计算机视觉