C 怎么读取Cpp文件_opencv从yaml文件中读取矩阵(c++)

PS:由于我是新手,因此记录的比较罗里吧嗦,本文也属于一个没有任何技术的编程积累。

在SLAM系统中,经常需要从配置文件中读取参数文件,读取整型,浮点型都是比较常见的操作,在读取矩阵卡了一下,记录一下读取的注意事项。

为此我写了一个测试文件,下面是各个文件的内容。

1.CMakeLists.txt文件

cmake_minimum_required(VERSION 2.8)
project(read_from_yaml)

set( CMAKE_CXX_FLAGS "-std=c++11 -march=native -O3" )
############### OpenCV dependencies ######################
find_package( OpenCV 3 REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )

add_executable(read_yaml_mat read_yaml_mat_test.cpp)
target_link_libraries(read_yaml_mat ${OpenCV_LIBS})

2.c++主文件(read_yaml_mat_test.cpp)

//
// Created by weihao on 2020/6/3.
//
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;

// Main function
int main(int argc, char** argv)
{
    if(argc != 2)
    {
        cerr << endl << "Usage: ./read_yaml_mat path_to_settings" << endl;
        return 1;
    }
    // read config file
    cv::FileStorage file_settings(argv[1], cv::FileStorage::READ);
    std::cout << "config file path: " << argv[1] << std::endl;

    // read camera instrinc
    int test_data = file_settings["test_data"];
    std::cout << "test data :" << test_data << std::endl;
    // read bool value
    bool test_bool;
    file_settings["test_bool"] >> test_bool;
    std::cout << "test_bool :" << test_bool << std::endl;
    // read OpenCV Mat
    cv::Mat cam_k;
    file_settings["cam_k"] >> cam_k;
    std::cout << "camera instrinc matrix :" << std::endl << cam_k << std::endl;
    return 0;
}

3. 参数文件(read_mat.yaml)

%YAML:1.0
test_data: 10
test_bool: 0
cam_k: !!opencv-matrix
  rows: 3
  cols: 3
  dt:   u
  data: [6, 2, 2, 2, 6, 2, 2, 2, 6]

重点:

  1. 矩阵读取时代码不能写成如下形式(类型无法转换,无法编译)
 cv::Mat cam_k = file_settings["cam_k"]

2. 读取bool变量时代码也不能写成如下形式,同时要注意参数文件中bool变量用0/1表示,不能用true/false(true/false都会返回1)

 bool data_bool = file_settings["test_bool"]

最后放一下运行结果:

550ff56957f1c9c9515792d2f12015a3.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值