矩阵的读写,使用.yaml文件形式

由于项目的需要,在进行测试的时候,需要将文件写入,然后再进行读出.这个过程之中,一开始我就是直接复制来,复制过去,发现麻烦的很.这个过程只需要将数据写入一个文件中,之后使用的时候直接在文件之中进行读取就是可以的.

一开始我是用的.txt文件进行的写入操作,写入结果如下图所示

试想一下,再进行测试的时候,需要用到这些矩阵,还需要在别的资料中重写,如下面似的.

反反复复写了很多遍,如果要是使用相应的.txt文件的读取方式是不是很麻烦.
因此,我就想到了要不要使用相应的.xml文件(这是一个前端学过的东西,很简单,就是什么标签啥的).这里我是使用了一个.yaml文件进行的,原理和.xml文件是差不多的.

查了一下相关的资料,很多的例程是使用OpenCV和这个.yaml文件搭配使用的,因此,这个思路是完全对的.

#include<iostream>
#include<vector>
#include<string>
#include <opencv2/opencv.hpp>
#include "opencv/highgui.h"

using namespace std;
using namespace cv;

int main(int argc, char** argv) {
	
	string filename = "datas.yaml";//文件的名称
	FileStorage fwriter(filename, FileStorage::WRITE);

	//存入矩阵Mat类型的数据
	Mat mat = Mat::eye(3, 3, CV_8U);
	fwriter.write("mat", mat);//使用write()函数写入数据
	
	fwriter.release();

	//以读取的模式打开文件
	FileStorage fread(filename, FileStorage::READ);
	//判断是否打开成功
	if (!fread.isOpened()) {
		cout << "打开文件失败,请确认文件名称是否正确!" << endl;
		return -1;
	}
	
	//读取Mat类型数据
	Mat matRead;
	fread["mat"] >> matRead;
	cout << "mat = " << matRead<< endl;

	//关闭文件
	fread.release();
	return 0;
}

输出如下所示:

但是我想要的是里面的元素,需要进行重新读取,这里的读取不能够使用.at方式进行读取,使用指针的方式进行读取,我又查到了这个博客.引入下面的代码进行访问opencv 取Mat元素的值_火星机器人life的博客-CSDN博客_opencv mat 取值获取通道channels=1,Mat元素类型为CV_32SC1的元素的值1)使用ptr指针如 mat.ptr(i)+j) 形式 注意: (1)元素类型是什么类型就用什么类型的指针,如CV_32SC1为32位有符号1通道矩阵,用uchar*指针,CV_32FC1为32位浮点单精度1通道矩阵,使用float*指针。#include#includehttps://blog.csdn.net/ktigerhero3/article/details/52366976?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167634862916800188533106%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167634862916800188533106&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-52366976-null-null.blog_rank_default&utm_term=%E5%8F%96%E5%87%BAcv%3A%3AMat%E7%9A%84%E5%85%83%E7%B4%A0&spm=1018.2226.3001.4450

猜你喜欢

转载自blog.csdn.net/m0_47489229/article/details/129018425