matlab生成opencv需要的xml文件

来源:互联网 发布:ppcoin源码 编辑:程序博客网 时间:2024/05/18 17:57

昨天花了一整天时间弄了matlab中的xml文件生成到opencv中读取的程序。虽然花了不少精力在这种文件格式上面,但庆幸的是,还是成功了。

为什么要进行这两者之间的转换:最近在做关于双目视觉车辆定位的项目,要在opencv中处理不少Mat的数据,而这些数据主要来源于matlab中(我主要是opencv编程,有个博士师兄负责matlab中的数据处理),所以想到用xml文件进行中间的转换。当然,你也可以在opencv下配置相应的matlab—Mat头文件,若此,你要考虑matlab的版本(x64或者x86)和你的编译器版本(x86或x64),也是蛮头疼的。

xml文件定义:它是Extentsible Markup Language(可扩展标记语言)的缩 写,是一种可以用来创建自定义标记的标记语言。它没有标签集(tag set),也没有语法规则(grammatical rule),但 是它有句法规则(syntax rule)。 XML文档可以是有效的(valid),但并非一定要求有效。所谓有效文档是指其符合其文档类型定义(DTD)的文档。如果一个文档符合一个模式(schema)的规定 ,那么这个文档是”模式有效的(schema valid)”。

下面是我用matlab生成的相应opencv下能读的xml文件:
这里写图片描述

xml文件格式简介:
这里写图片描述

下面附上代码:

function createxml(name1,datatest1,name2,datatest2) % name是输入的文件名,datatest是matlab中的矩阵(一般都是float格式存储的)xdoc=com.mathworks.xml.XMLUtils.createDocument('opencv_storage');xroot=xdoc.getDocumentElement;%========定义矩阵,写入xml[m1,n1]=size(datatest1);type=xdoc.createElement(name1);xroot.appendChild(type);type.setAttribute('type_id','opencv-matrix')rows=xdoc.createElement('rows');rows.appendChild(xdoc.createTextNode(sprintf('%d',m1)));type.appendChild(rows);cols=xdoc.createElement('cols');cols.appendChild(xdoc.createTextNode(sprintf('%d',n1)));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 ',datatest1)));type.appendChild(data);%=======结束写入%========定义数组,写入xml[m2,n2]=size(datatest2);type=xdoc.createElement(name2);xroot.appendChild(type);type.setAttribute('type_id','opencv-matrix')rows=xdoc.createElement('rows');rows.appendChild(xdoc.createTextNode(sprintf('%d',m2)));type.appendChild(rows);cols=xdoc.createElement('cols');cols.appendChild(xdoc.createTextNode(sprintf('%d',n2)));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 ',datatest2)));type.appendChild(data);str=strcat(name1,'.xml');xmlwrite(str,xdoc);end

调用函数:

clc;clear all;data_1x9=[1,2,3,4,5,6,7,8,9];data_3x3=[1,2,3;4,5,6;7,8,9];createxml('Mat1x9',data_1x9,'Mat3x3',data_3x3);

主要定义了data_1x9和data_3x3的矩阵,然后将这两个矩阵存入xml文件中。
有一点需要注意的是:输出的xml文件第一行中xml version=”1.0”
encoding=”utf-8” 需要删去 encoding=”utf-8” 否则会出现opencv不可读的现象。要保留两个问号!另外:在用matlab调试代码的时候出现类似于“JAVA 数组维数超标”的提示,让我不禁发觉,matlab中的xml文件是用JAVA语言的,是一种网络格式的文件,这就是和opencv里面生成的xml的区别!opencv里面生成的xml文件是基于C++的。

从matlab中写xml文件,然后用opencv读出来,加上看相关资料,花了整整一天时间,但是今天却发现这个没有想象中的那么重要,有点遗憾,
遂写成blog与大家共享。

这是我入研究生以来的第一篇C博客,如果里面有什么写的不对的地方,望各位批评指正,多谢!

最后非常感谢:
(http://wzy2px.blog.sohu.com/242141572.html)公开的代码。
本文主要说明了xml文件属性和怎么从matlab里面生成opencv需要的xml文件格式的操作,对于matlab和opencv读写xml文件具体参看一下网页:
opencv读写xml:
(http://www.cnblogs.com/summerRQ/articles/2524560.html)
matlab读写xml:
(http://www.cnblogs.com/emituofo/archive/2011/11/06/2238219.html)

1 0
原创粉丝点击