参考:【从零学习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()