python保存yaml文件, C++读取

699 阅读1分钟

参考:【从零学习OpenCV】保存和读取XML和YMAL文件 - 云+社区 - 腾讯云 (tencent.com)

  • python 保存
    import cv2 as cv  
    import numpy as np    
    def save_cam_param(cameraMatrix, distCoeffs, file_path):
       file_yaml = file_path + "plan1.yaml"
       fs = cv2.FileStorage(file_yaml, cv2.FileStorage_WRITE)
       fs.write("cameraMatrix", cameraMatrix)
       fs.write("distCoeffs", distCoeffs)
       fs.release()
    
  • C++ 读取
    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include <vector>
    
    int main(int argc, char **argv)
    {
        //read a yaml file
        cv::FileStorage fs_read("./test.yaml", cv::FileStorage::READ);
    
        std::string time;
        //second method:use FileNode::operator >>
        fs_read["Time"] >> time;
    
        std::vector<int> image_size;
        fs_read["imageSize"] >> image_size;
    
        cv::Mat camera_matrix, distort_coefficient;
        fs_read["cameraMatrix"] >> camera_matrix;
        fs_read["distCoeffs"] >> distort_coefficient;
    
        std::cout << "Time: " << time << std::endl
                  << "cameraMatrix: " << camera_matrix << std::endl
                  << "distCoeffs: " << distort_coefficient << std::endl;
    
        fs_read.release();
    
        return 0;
    }
    

  • C++写入
    #include <opencv2/opencv.hpp>
    #include <time.h>
    #include <iostream>
    
    int main(int argc, char** argv)
    {
      //write a yaml file
      cv::FileStorage fs_write("./test.yaml", cv::FileStorage::WRITE);
    
      time_t rawtime;
      time(&rawtime);
      fs_write << "Time" << asctime(localtime(&rawtime));
    
      std::vector<int> image_size = {1280, 800};
      fs_write << "imageSize" << image_size; 
    
      cv::Mat camera_matrix = (cv::Mat_<double>(3, 3) << 190, 0, 640, 
                                                         0, 190, 400, 
                                                         0, 0, 1);
      cv::Mat distort_coefficient = (cv::Mat_<double>(5, 1) << 0.1, 0.01, -0.001, 0, 0);
      fs_write << "cameraMatrix" << camera_matrix << "distCoeffs" << distort_coefficient;
    
      fs_write.release();
    
      return 0;
    }
    
  • python 读取
    # 读取相机内参
    fs2 = cv2.FileStorage('../cam_param/cam_param.yaml', cv2.FileStorage_READ)
    cameraMatrix = fs2.getNode('cameraMatrix').mat()
    distCoeffs = fs2.getNode('distCoeffs').mat()      
    
    num1 = fs2.getNode('num1').real()
    num2 = fs2.getNode('num2').real()
    str1 = fs2.getNode('str1').string()
    str2 = fs2.getNode('str2').string()    
    # 关闭文件
    fs2.release()