遇到一个问题,需要将matlab中的矩阵用opencv打开。故尝试了下在matlab中编辑.xml文件,用opencv中的cvLoad调用。
首先用opencv自带函数生成一个.xml文件
double a[9]={2,2,3,4,5,6,1,2,2};
CvMat *testmat=cvCreateMat(3,3,CV_64FC1);
cvInitMatHeader(testmat,3,3,CV_64FC1,a);
cvSave("my.xml",testmat);
打开后格式为
3
3
d2. 2. 3. 4. 5. 6. 1. 2. 2.
在matlab中编写文件,用xmlwrite生成.xml文件
function createxml(name,datatest) % name是输入的文件名,data是matlab中的矩阵(一般都是float格式存储的)
xdoc=com.mathworks.xml.XMLUtils.createDocument(‘opencv_storage');
xroot=xdoc.getDocumentElement;
%
[m,n]=size(datatest);
type=xdoc.createElement(name);
xroot.appendChild(type);
type.setAttribute(‘ type_id',’ opencv-matrix')
%
rows=xdoc.createElement(’ rows');
rows.appendChild(xdoc.createTextNode(sprintf('%d',m)));
type.appendChild(rows);
cols=xdoc.createElement(‘ cols');
cols.appendChild(xdoc.createTextNode(sprintf('%d',n)));
type.appendChild(cols);
dt=xdoc.createElement(‘ dt');
dt.appendChild(xdoc.createTextNode(sprintf('%s',’ f')));
type.appendChild(dt);
data=xdoc.createElement(’ data');
data.appendChild(xdoc.createTextNode(sprintf('%f ',datatest)));
type.appendChild(data);
str=strcat(name,‘ .xml');
xmlwrite(str,xdoc);
end
输出的xml文件第一行<?xml version="1.0" encoding="utf-8"?> 需要删去encoding="utf-8" 否则会出现opencv不可读的现象。
此时的xml便可以直接用opencv读出了---
测试:
matlab: data=[1,2,3,4,5,6,7,8,9]; createxml(’ test',data)
opencv:
CvMat* testmat=(CvMat*)cvLoad("test.xml");
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{
cout<
}
cout<
}
显示结果: