基于opencv的mat简单存取,cvFileStorage的学习

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>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值