打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用VS2010调用matlab的mat格式文件

做实验需要将matlab实现的meanshift的结果中的region的Iabels矩阵,需要把labels.mat读入VS2010中,实现功能,在此把实现过程记录下来:

C++读取mat文件:

1. vs2010的配置

新建一个工程,在属性管理器中选择 工程->属性->VC++目录。

设置包含目录为:D:\MATLAB\R2010a\extern\include(我的matlab装在D盘);

设置库目录为:D:\MATLAB\R2010a\extern\lib\win32\microsoft。

2.设置环境变量path

计算机->属性->高级系统设置->高级->环境变量

在Path中已经存在D:\MATLAB_2011a\R2011a\bin\,但是D:\MATLAB_2011a\R2011a\bin\win32下有个重要的libmat.dll。如果不把d:\MATLAB\R2010a\bin\改为D:\MATLAB_2011a\R2011a\bin\win32 程序将无法运行。

      理论上D:\MATLAB_2011a\R2011a\bin\应该会向深一步检索到libmat.dll。坑爹的windows这一步并没有去做。这步设置完后要重启(环境配置完毕)。

3.

3.使用MATLAB 提供的MAT 文件接口函数

    在C/C++程序中有两种方式可以读取MAT文件数据。利用MATLAB提供的有关MAT文件的编程接口函数。MATLAB的库函数中包含了MAT文件接口函数库,其中有各种对MAT文件进行读写的函数,都是以mat开头的函数。如表1所示。

表1  C语言中的MAT文件读写函数

MAT  函  数

功    能

matOpen

打开 MAT 文件

matClose

关闭 MAT 文件

matGetDir

从 MAT 文件中获得 MATLAB 阵列的列表

matGetFp

获得一个指向MAT 文件的ANSI C 文件指针

matGetVariable

从MAT文件中读取MATLAB阵列

matPutVariable

写MATLAB阵列到MAT文件

matGetNextVariable

从MAT文件中读取下一个MATLAB阵列

matDeleteVariable

从MAT文件中删去下一个MATLAB阵列

matPutVariableAsGlobal

从MATLAB阵列写入到MAT文件中

matGetVariableInfo

从MAT文件中读取MATLAB阵列头信息

matGetNextVariableInfo

从MAT文件中读取下一个MATLAB阵列头信息

 

4.程序举例:读取.mat文件,并把mat内容存储在图像中并显示。

  注意:坑爹的默认读取.mat的方式是按列读取,不是按行读取,害的劳资瞎忙乎一晚上!!!

  1. #include "stdafx.h"  
  2.   
  3.   
  4. /*int main()*/  
  5. int loadMat(Mat& regId)  
  6. {  
  7.   
  8.     MATFile *pmat;  
  9.   
  10.     const char **dir;  
  11.   
  12.     const char *file;  
  13.   
  14.     const char *name;  
  15.   
  16.     int         ndir;  
  17.   
  18.     mxArray *pa;  
  19.   
  20.     file="D:/labels3_ms.mat";//双反斜杠防止转义  
  21.   
  22.     pmat=matOpen(file, "r");//打开文件,返回指向文件指针  
  23.   
  24.     if (pmat == NULL) {  
  25.   
  26.         cout<<"Error opening file"<<><>< li="">
  27.   
  28.         return(1);  
  29.   
  30.     }   
  31.   
  32.     dir = (const char **)matGetDir(pmat, &ndir);  
  33.   
  34.     //ndir 表示mat文件中含有矩阵数目  
  35.   
  36.     if (dir == NULL) {  
  37.   
  38.         std::cout<<"Error reading directory of file"<<><>< li="">
  39.   
  40.         return(1);  
  41.   
  42.     }  
  43.   
  44.     else  
  45.   
  46.     {  
  47.   
  48.         cout<<"Error opening file"<<><>< li="">
  49.   
  50.         for (int i=0; i < ndir; i++)  
  51.   
  52.             cout<<"Mat NUM: "<<><>
  53.   
  54.     }  
  55.   
  56.         pmat=matOpen(file, "r");//重新打开文件;  
  57.   
  58.     pa = matGetNextVariable(pmat, &name);  
  59.   
  60.     //返回指向文件头文件信息的指针,指针类型为*mxArray;  
  61.   
  62.     //name 是矩阵的名字;  
  63.   
  64.     cout<<><>< li="">
  65.   
  66.     pmat=matOpen(file, "r");  
  67.   
  68.     int ii=mxGetM(pa);//矩阵行数400  
  69.   
  70.     int jj=mxGetN(pa);//矩阵列数300  
  71.   
  72.     int *pm=(int*)mxGetPr(pa); //获取矩阵数值,返回指向矩阵第一数值的指针;  
  73.   
  74.     regId=Mat::zeros(jj,ii,CV_8UC1);  
  75.       
  76.     /*ofstream out("D:/abc.txt");*/  
  77.   
  78.   
  79.     mapregSize;  
  80.     int m=0;  
  81.       
  82.     for (int r=0;r<>< li="">
  83.     {  
  84.           
  85.         int n=0;  
  86.         m++;  
  87.         uchar *id=regId.ptr(r);  
  88.         for (int c=0;c<>< li="">
  89.         {  
  90.             id[c]=(*pm);  
  91.             pm++;  
  92.             regSize[*pm]++;  
  93.               
  94.         }  
  95.   
  96.     }  
  97.   
  98.     cout<<"regSize:"<<><>< li="">
  99. //  for(map::iterator iter=regSize.begin();iter!=regSize.end();iter++)  
  100. //  {  
  101. //      cout<first<<" size: "<second<<>< li="">
  102. //  }  
  103.     mxFree(dir);  
  104. //  //normalize(regId,regId,0,1,CV_MINMAX,CV_32FC1);  
  105.     regId=regId.t();  
  106.     //imshow("show",regId);  
  107.     //waitKey();  
  108.     //imwrite("D:/regId1.jpg",regId);  
  109.     //return 1;  
  110.     return regSize.size();  
  111. }  


 另附:使用VS调用matlab的.m文件

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
关于matlab安装后无法与.m、.mat、.fig文件之类关联解决方案
matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭
转载:写给学习 matlab 的新手们
vc对.mat文件的读取
matlab.mat文件的建立和save的使用
[转载]磁共振实验数据SPM8处理流程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服