Matlab读取xml文件——OpenCV通过FileStorage存储的矩阵Mat
2016-10-15 19:48
561 查看
问题描述:
最近在做实验的时候,用的是OpenCV,需要将矩阵通过图表的方式显示出来,例如:直方图。But 我不太会用OpenCV将图表显示出来。此时此刻,想到了强大的软件Matlab。但是,数据是用OpenCV中的FileStorage方法用xml文件将矩阵进行存储。Matlab如何将矩阵进行读入是关键。
网上有很多的方法,但是感觉对像我这样存储的用户太过复杂,于是就写一篇简单的,希望能帮助到大家。
解决办法
OpenCV中将矩阵写入xml文件的方法很简单,利用FileStorage方法,基本三行就可以搞定。
其他小知识
matlab中可以用class(var)查询数据var的类型,例如var是double类型,这class(var)就是double;
matlab中可以用str2num(a),将string类型转化为数字类型。
祝大家学习健康,生活快乐!!!
最近在做实验的时候,用的是OpenCV,需要将矩阵通过图表的方式显示出来,例如:直方图。But 我不太会用OpenCV将图表显示出来。此时此刻,想到了强大的软件Matlab。但是,数据是用OpenCV中的FileStorage方法用xml文件将矩阵进行存储。Matlab如何将矩阵进行读入是关键。
网上有很多的方法,但是感觉对像我这样存储的用户太过复杂,于是就写一篇简单的,希望能帮助到大家。
解决办法
OpenCV中将矩阵写入xml文件的方法很简单,利用FileStorage方法,基本三行就可以搞定。
FileStorage mul_wr(".\\0.xml", FileStorage::WRITE); mul_wr << "result" << result; mul_wr.release();</span>最后得到的xml文件结构如下所示(只给出一部分):
<?xml version="1.0"?> <opencv_storage> <result type_id="opencv-matrix"> <rows>50000</rows> <cols>1</cols> <dt>d</dt> <data> 2.8882032819301821e+002 -6.8150904489448294e-001 4.5750426905229688e+001 1.8478395644389093e+002 -1.3984500984381884e+002 -5.2998318639583886e+001 2.6773534634662792e+002 1.1899971175007522e+000 -7.5492174654966220e+001 2.1866303959977813e+002 -1.3364549682929646e+002 1.7896846196893603e+002 9.4229298247839324e+001 1.0382060136087239e+002 3.3998946248553693e+001 -1.5178917868062854e+002 1.5348514711554162e+002 3.8458418705937220e+001 7.1695511569269001e+001 -8.9653154644649476e+001 4.4976377896527993e+000 2.7091610717397998e+002 2.4743137456942350e+001 -1.1738243190571666e+001 2.0047841143980622e+002 1.6443823127949145e+001 </data></result> </opencv_storage>下面,就用上面这个例子,用Matlab 代码将矩阵进行读入代码如下所示:
<span style="font-size:18px;">function opencv2matlab() % 读取opencv中xml文件,表示的是矩阵。 xmlDoc = xmlread('0.xml'); %得到矩阵的行数,如果存储了多个矩阵,可以进行循环 item(i) row = xmlDoc.getElementsByTagName('rows').item(0).getFirstChild.getData; %得到矩阵的列数 col = xmlDoc.getElementsByTagName('cols').item(0).getFirstChild.getData; row = str2num(row);%读入是string类型,转为数字; col = str2num(col);%同上 %读入矩阵,这里注意,矩阵的行数和列数跟xml存储的方式相同,例如,这里是25000x2,所以读入的矩阵是25000x2 histstring =char(xmlDoc.getElementsByTagName('data').item(0).getFirstChild.getData); %对矩阵进行处理,得到原来的矩阵 %将char类型转为数字类型 hists = str2num(histstring); last = eye(row,col,'double'); [a,b] = size(hists); k =1; %disp(); n =1; for i=1:a for j =1:b m=1; last(n,m) = hists(i,j); m= m+1; if m==col n = n+1; end end end [a,b] = size(last); disp(last); end</span></span>这里得到的矩阵last就是OpenCV处理后的数据,就可以用个数据,在matlab平台上进行数据处理。
其他小知识
matlab中可以用class(var)查询数据var的类型,例如var是double类型,这class(var)就是double;
matlab中可以用str2num(a),将string类型转化为数字类型。
祝大家学习健康,生活快乐!!!
相关文章推荐
- Eclipse中通过FileSystemXmlApplicationContext读取不到配置文件问题
- OpenCV保存成XML(FileStorage)和CSV(重载<<运算符)文件
- OpenCV FileStorage类读写XML/YML文件
- Opencv(C++)和matlab之间通过mat传递数据(矩阵)
- 将MATLAB中的mat数据转换为OpenCV能够读取的xml数据
- Matlab的矩阵存储和opencv mat的区别
- matlab 读取文件(mat)存储为json文件
- 将matlab的数据保存xml 在c++下通过opencv读取;
- OpenCV保存成XML(FileStorage)和CSV(重载<<运算符)文件
- OpenCV保存成XML(FileStorage)和CSV(重载<<运算符)文件
- 通过需要授权访问的http读取xml文件
- MATLAB 定义结构体数组 并存到mat 文件 读取mat
- 通过Glib库中的GKeyFile来读取配置文件
- 如何使用opencv的c++接口来读取、写结构体数组到xml文件中
- Matlab 和 C 动态开辟、存储和相互文件读取的测试代码
- 将matlab 生成的mat矩阵存储到txt中。
- 【Android 开发】:数据存储之File文件存储 [即SD卡的写入与读取]
- 如何在python中读写和存储matlab的数据文件(*.mat)
- matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭
- 利用WP7独立存储IsolatedStorageFile读写文件