opencv保存Mat为xml并读入matlab中

工作中需要计算cv::Mat的各种投影,并绘制曲线,这种工作用C++来写实在是恼火,想着用matlab来着,于是搜索了一下大家的做法,参考以下:

Matlab读取xml文件——OpenCV通过FileStorage存储的矩阵Mat

Opencv中的Mat文件在matlab打开

 经过一番尝试,链接1的方法可成功将opencv的Mat写入xml中,然而matlab从xml读取数据入矩阵始终有问题,链接2运行提示有问题,结合二者,并经过自己修改,给出以下方法。

1.OpenCV中的cv::Mat写入xml中


  此部分参照链接1,使用FileStorage。
	void writeMatToXML(const cv::Mat & mat, const std::string xmlName)
	{
		FileStorage fs(xmlName, FileStorage::WRITE);
		fs << "Mat" << mat;
		fs.release();
	}

2.matlab读取xml文件,写入mat


%function [ pic2 ] = xml2mat( xml_name )
clear;
%读取opencv中xml文件,表示的是矩阵。
 xmlDoc = xmlread('swt.xml');
 %得到矩阵的行数
 row = xmlDoc.getElementsByTagName('rows').item(0).getFirstChild.getData;
 %得到矩阵的列数
 col = xmlDoc.getElementsByTagName('cols').item(0).getFirstChild.getData;
 row = str2num(row);%读入是string类型,转为数字;
 col = str2num(col);%同上
 %此时读入的是一串字符
 histstring =char(xmlDoc.getElementsByTagName('data').item(0).getFirstChild.getData);

x1 =strtrim(histstring);%去除首位空格,一般在首位有空格
x2 = strsplit(x1);%按照空格切分字符
x3 = str2double(x2);%转为double型

pic1 = reshape(x3,col,row);%转为(col,row)尺寸的mat
pic2 = pic1';%求转置,这是因为xml文件中的数据是一列一列写入的
%imshow(pic2,[]);
%end



你可能感兴趣的:(图像处理)