OpenCV存储Mat数据 与matlab读取

      版权声明:本文为博主原创文章,未经博主允许不得转载。          https://blog.csdn.net/u014686356/article/details/52824565        </div>
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
                          <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css">
      <div class="htmledit_views" id="content_views">

问题描述:

            最近在做实验的时候,用的是OpenCV,需要将矩阵通过图表的方式显示出来,例如:直方图。But 我不太会用OpenCV将图表显示出来。此时此刻,想到了强大的软件Matlab。但是,数据是用OpenCV中的FileStorage方法用xml文件将矩阵进行存储。Matlab如何将矩阵进行读入是关键。

网上有很多的方法,但是感觉对像我这样存储的用户太过复杂,于是就写一篇简单的,希望能帮助到大家。

解决办法

   OpenCV中将矩阵写入xml文件的方法很简单,利用FileStorage方法,基本三行就可以搞定。


 
 
  1. FileStorage mul_wr(".\\0.xml", FileStorage::WRITE);
  2. mul_wr << "result" << result;
  3. mul_wr.release();</span>
    最后得到的xml文件结构如下所示(只给出一部分):


 
 
  1. <?xml version="1.0"?>
  2. <opencv_storage>
  3. <result type_id="opencv-matrix">
  4. <rows>50000 </rows>
  5. <cols>1 </cols>
  6. <dt>d </dt>
  7. <data>
  8. 2.8882032819301821e+002 -6.8150904489448294e-001
  9. 4.5750426905229688e+001 1.8478395644389093e+002
  10. -1.3984500984381884e+002 -5.2998318639583886e+001
  11. 2.6773534634662792e+002 1.1899971175007522e+000
  12. -7.5492174654966220e+001 2.1866303959977813e+002
  13. -1.3364549682929646e+002 1.7896846196893603e+002
  14. 9.4229298247839324e+001 1.0382060136087239e+002
  15. 3.3998946248553693e+001 -1.5178917868062854e+002
  16. 1.5348514711554162e+002 3.8458418705937220e+001
  17. 7.1695511569269001e+001 -8.9653154644649476e+001
  18. 4.4976377896527993e+000 2.7091610717397998e+002
  19. 2.4743137456942350e+001 -1.1738243190571666e+001
  20. 2.0047841143980622e+002 1.6443823127949145e+001
  21. </data> </result>
  22. </opencv_storage>
  下面,就用上面这个例子,用Matlab 代码将矩阵进行读入代码如下所示:


 
 
  1. <span style= "font-size:18px;">function opencv2matlab()
  2. % 读取opencv中xml文件,表示的是矩阵。
  3. xmlDoc = xmlread( '0.xml');
  4. %得到矩阵的行数,如果存储了多个矩阵,可以进行循环 item(i)
  5. row = xmlDoc.getElementsByTagName( 'rows').item( 0).getFirstChild.getData;
  6. %得到矩阵的列数
  7. col = xmlDoc.getElementsByTagName( 'cols').item( 0).getFirstChild.getData;
  8. row = str2num(row);%读入是 string类型,转为数字;
  9. col = str2num(col);%同上
  10. %读入矩阵,这里注意,矩阵的行数和列数跟xml存储的方式相同,例如,这里是 25000x2,所以读入的矩阵是 25000x2
  11. histstring = char(xmlDoc.getElementsByTagName( 'data').item( 0).getFirstChild.getData);
  12. %对矩阵进行处理,得到原来的矩阵
  13. %将 char类型转为数字类型
  14. hists = str2num(histstring);
  15. last = eye(row,col, 'double');
  16. [a,b] = size(hists);
  17. k = 1;
  18. %disp();
  19. n = 1;
  20. for i= 1:a
  21. for j = 1:b
  22. m= 1;
  23. last(n,m) = hists(i,j);
  24. m= m+ 1;
  25. if m==col
  26. n = n+ 1;
  27. end
  28. end
  29. end
  30. [a,b] = size(last);
  31. disp(last);
  32. end</span></span>
   这里得到的矩阵last就是OpenCV处理后的数据,就可以用个数据,在matlab平台上进行数据处理。

其他小知识
   matlab中可以用class(var)查询数据var的类型,例如var是double类型,这class(var)就是double;

   matlab中可以用str2num(a),将string类型转化为数字类型。


祝大家学习健康,生活快乐!!!




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值