1、高级系统设置-&高级-&环境变量在Path中已经存在D:MATLAB_2011aR2011abin,但是D:MATLAB_2011aR2011abinwin32下有个重要的libmat.dll。如果不把d:MATLABR2010abin改为D:MATLAB_2011aR2011abinwin32 程序将无法运行。 理论上D:MATLAB_2011aR2011abin应该会向深一步检索到libmat.dll。坑爹的windows这一步并没有去做。这步设置完后要重启(环境配置完毕)。3.3.使用MATLAB 提供的MAT 文件接口函数 在C/C+程序中有两种方式可以读取MAT文件数据。利用MATL
2、AB提供的有关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文件中读取下一个MAT
3、LAB阵列matDeleteVariable从MAT文件中删去下一个MATLAB阵列matPutVariableAsGlobal从MATLAB阵列写入到MAT文件中matGetVariableInfo从MAT文件中读取MATLAB阵列头信息matGetNextVariableInfo从MAT文件中读取下一个MATLAB阵列头信息 4.程序举例:读取.mat文件,并把mat内容存储在图像中并显示。 注意:坑爹的默认读取.mat的方式是按列读取,不是按行读取,害的劳资瞎忙乎一晚上!cpp view plaincopyprint?#include stdafx.h/*int main()*/ int
4、 loadMat(Mat& regId) MATFile *pmat; const char *dir; const char *file; const char *name; int ndir; mxArray *pa; file=/labels3_ms.mat;/双反斜杠防止转义 pmat=matOpen(file, r);/打开文件,返回指向文件指针 if (pmat = NULL) cout<&Error opening file return(1); dir = (const char *)matGetDir(pmat, &ndir); /ndir 表示mat文件中含有
5、矩阵数目 if (dir = NULL) std:cout&Error reading directory of file else for (int i=0; i & ndir; i+) Mat NUM: /重新打开文件; pa = matGetNextVariable(pmat, &name); /返回指向文件头文件信息的指针,指针类型为*mxArray; /name 是矩阵的名字; int ii=mxGetM(pa);/矩阵行数400 int jj=mxGetN(pa);/矩阵列数300 int *pm=(int*)mxGetPr(pa); /获取矩阵数值,返回指向矩阵第一数值的指针;
6、regId=Mat:zeros(jj,ii,CV_8UC1); /*ofstream out(/abc.txt*/ mapregSize; int m=0; for (int r=0;r int n=0; m+; uchar *id=regId.ptr(r); for (int c=0;c idc=(*pm); pm+; regSize*pm+;regSize:/ for(map:iterator iter=regSize.begin();iter!=regSize.end();iter+) / / cout&first& size:second&/ mxFree(dir);/ /normalize(regId,regId,0,1,CV_MINMAX,CV_32FC1); regId=regId.t(); /imshow(show,regId); /waitKey(); /imwrite(/regId1.jpg /return 1; return regSize.size(); 另附:使用VS调用matlab的.m文件
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1