platform:opencv 3.4.2&vs2017
#include<iostream>
#include "cv.h"
#include "highgui.h"
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
void printMat(CvMat * mat);
int main() {
/*简单存放读取CvMat型*/
float val[4] = { 1,2,3,4 };
CvMat mat = cvMat(2, 2, CV_32FC1,val);
cvSave("..//..//data_save_read_mat.xml", &mat);
CvMat *my_mat = (CvMat*)cvLoad("..//..//data_save_read_mat.xml");
printMat(my_mat);
/*假如我们要配置一个cfg.xml的文件,里面包含视频有多少帧,画面大小,以及my_mat矩阵*/
CvFileStorage *fs = cvOpenFileStorage(
"..//..//data_save_read_cfg.xml",
0,
CV_STORAGE_WRITE
);
cvWriteInt(fs, "frames_count", 10);
cvStartWriteStruct(fs, "frames_size", CV_NODE_SEQ);
cvWriteInt(fs, 0, 320);
cvWriteInt(fs, 0, 200);
cvWriteString(fs, 0, "尹牙子到此一游");
cvEndWriteStruct(fs);
cvWrite(fs, "my_mat", my_mat);
cvReleaseFileStorage(&fs);
/*现在我们折腾去读取cfg.xml里面的帧,画面大小,my_mat矩阵*/
CvFileStorage *fr = cvOpenFileStorage(
"..//..//data_save_read_cfg.xml",
0,
CV_STORAGE_READ
);
int frames_cout = cvReadIntByName(
fr,
0,
"frames_cout",
5/*default value*/
);
CvSeq * s = cvGetFileNodeByName(fr, 0, "frames_size")->data.seq;
int width = cvReadInt((CvFileNode *)cvGetSeqElem(s, 0));
int height = cvReadInt((CvFileNode *)cvGetSeqElem(s, 1));
const char * kris = cvReadString((CvFileNode*)cvGetSeqElem(s, 2));
CvMat * my_mat_read = (CvMat *)cvReadByName(fr, 0, "my_mat");
cvReleaseFileStorage(&fr);
cout << kris << endl;
printMat(my_mat_read);
}
void printMat(CvMat* mat) {
float * point = (float *)cvPtr2D(mat,0,0);
for (int i = 0; i < mat->rows; i++) {
for(int j=0;j<mat->cols;j++)
cout << *(point++) << '\t';
cout << endl;
}
}
<?xml version="1.0"?>
<opencv_storage>
<data_save_read_mat type_id="opencv-matrix">
<rows>2</rows>
<cols>2</cols>
<dt>f</dt>
<data>
1. 2. 3. 4.</data></data_save_read_mat>
</opencv_storage>
<?xml version="1.0"?>
<opencv_storage>
<frames_count>10</frames_count>
<frames_size>
320 200 "尹牙子到此一游"</frames_size>
<my_mat type_id="opencv-matrix">
<rows>2</rows>
<cols>2</cols>
<dt>f</dt>
<data>
1. 2. 3. 4.</data></my_mat>
</opencv_storage>