matlab xml opencv,matlab生成opencv需要的xml文件

昨天花了一整天时间弄了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文件:

dfd70fba0da0519bc69544480d5894dd.png

xml文件格式简介:

8a9f48f5a6dc1e9cbed04897d39d148c.png

下面附上代码:

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值