使用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.使用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内容存储在图像中并显示。

注意:在Studio中一定要注意,默认读取.mat的方式是按列读取,不是按行读取。这是matlab数据存储的特色!

#include "stdafx.h"  int loadMat(Mat& regId)  
{  MATFile *pmat;  const char **dir;  const char *file;  const char *name;  int         ndir;  mxArray *pa;  file="D:/labels3_ms.mat";//双反斜杠防止转义  pmat=matOpen(file, "r");//打开文件,返回指向文件指针if (pmat == NULL) { cout<<"Error opening file"<<file<<endl; return(1);  }   dir = (const char **)matGetDir(pmat, &ndir);  //ndir 表示mat文件中含有矩阵数目  if (dir == NULL) { std::cout<<"Error reading directory of file"<<file<<endl;  return(1);  }  else  { cout<<"Error opening file"<<file<<endl;  for (int i=0; i < ndir; i++)  cout<<"Mat NUM: "<<dir[i]<<endl;//输出所含矩阵数目 
    }  pmat=matOpen(file, "r");//重新打开文件;  pa = matGetNextVariable(pmat, &name);  //返回指向文件头文件信息的指针,指针类型为*mxArray;  //name 是矩阵的名字;  cout<<name<<endl;  pmat=matOpen(file, "r"); int ii=mxGetM(pa);//矩阵行数400 int jj=mxGetN(pa);//矩阵列数300  int *pm=(int*)mxGetPr(pa); //获取矩阵数值,返回指向矩阵第一数值的指针;  regId=Mat::zeros(jj,ii,CV_8UC1);  map<<span>int,int>regSize;  int m=0;  for (int r=0;r{  int n=0;  m++;  uchar *id=regId.ptr(r);  for (int c=0;c{  id[c]=(*pm);  pm++;  regSize[*pm]++;  }  }  cout<<"regSize:"<<regSize.size()<<endl;  
//  for(map::iterator iter=regSize.begin();iter!=regSize.end();iter++)  
//  {  
//      cout<<iter->first<<" size: "<<iter->second<<endl;  
//  }  
mxFree(dir);  
//  //normalize(regId,regId,0,1,CV_MINMAX,CV_32FC1);  regId=regId.t();  //imshow("show",regId);  //waitKey();  //imwrite("D:/regId1.jpg",regId);  //return 1;  return regSize.size();  
}

 

 

 

 

转载于:https://www.cnblogs.com/arxive/p/5928966.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 中间件 atlas_Mysql中间件代理 Atlas

本文接上文介绍atlas的安装配置&#xff0c;以及借助keepalive软件实现altas的ha&#xff0c;避免由于atlas故障&#xff0c;导致数据库服务中断的情况出现&#xff1a;一&#xff1a;环境介绍Atlas 主&#xff1a;192.168.1.12/24Atlas 从&#xff1a;192.168.1.81/24Atlas vi…

nodejs mysql事务处理_关于NodeJs如何使用Mysql模块实现事务处理实例

本篇文章主要介绍了NodeJs使用Mysql模块实现事务处理 &#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来看看吧依赖模块&#xff1a;1. mysqlnpm install mysql --save2. asyncnpm install async --save(ps: async模块可…

如何正确的通过 C++ Primer 学习 C++?(转自知乎)

作者&#xff1a;dawnmist链接&#xff1a;https://www.zhihu.com/question/32087709/answer/54936403来源&#xff1a;知乎著作权归作者所有&#xff0c;转载请联系作者获得授权。个人经验&#xff0c;C primer 第一次可以跳着看。关键是要尽快用起来&#xff0c;在使用中熟练…

Androidstudio连mysql_MySQL数据库之Android Studio使用JDBC远程连接mysql的注意事项(附示例)...

本文主要向大家介绍了MySQL数据库之Android Studio使用JDBC远程连接mysql的注意事项(附示例) &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。JDBC为java程序访问各种类型的关系型数据库提供了统一的接口&#xff0c;用户不必针对不同数…

纪中2016.10.6比赛不明总结

100<分数<310 ———————————————————————————————————— 期望值&#xff1a; |T1&#xff1a;100/T2&#xff1a;10/T3&#xff1a;100/T4&#xff1a;100 ————————————————————————————————————…

zendstudio快捷键收录

360截屏快捷键&#xff1a;ctrlshiftxzendstudio:注释代码&#xff1a;ctrlshift/删除光标所在行&#xff1a;ctrlD复制当前行&#xff1a;ctrlalt↓上下行互换:alt↑/↓代码格式化&#xff1a;CtrlshiftF&#xff0c;缩进&#xff1a;tab代码折叠快捷键&#xff1a;Ctrl/(小键…

centos8.2安装mysql_centos8安装mysql

通过以root用户或者具有sudo特权的用户身份使用CentOS软件包管理器(dnf)来安装MySQL 8.0# dnf install mysql安装好后&#xff0c;这里注意需要修改两个文件的权限&#xff0c;否则启动失败。# chown -R mysql:mysql /var/run/mysqld# chmod -R 777 /var/lib/mysql设置为开机自…

dedecms代码研究三

上次&#xff0c;我们从dedecms的index.PHP文件中了解到了很多信息&#xff0c;也提出了一些问题&#xff1a; 1&#xff09;加载了/include/common.inc.php&#xff0c;里面做了哪些工作&#xff1f;2&#xff09;/include/arc.partview.class.php到底是干什么的&#xff0c;/…

idea快捷操作_IDEA插件系列 快捷键神器!Key Promoter X

今天起&#xff0c;会陆续给大家介绍一些IDEA的插件。正所谓工欲善其事必先利其器&#xff0c;一款好的插件可以帮我们提升开发效率&#xff0c;或者提升使用IDEA的幸福感&#xff01;今天要推荐的第一款插件 Key Promoter X 。相信很多新手甚至老手&#xff0c;对IDEA中的快捷…

《开讲啦》 20160910 颜宁:女科学家去哪儿了?

视频地址&#xff1a; 《开讲啦》 20160910 颜宁&#xff1a;女科学家去哪儿了&#xff1f; 果然是女神科学家&#xff0c;讲了一些我很感兴趣的东西&#xff0c;让我也体会到了女神的气质&#xff0c;有点感触&#xff0c;这个节目不错&#xff0c;可以追。 颜宁教授于2016年5…

if __name__ == __main__:什么意思_秒懂Python编程中的if __name__ == 'main' 的作用和原理...

来源&#xff1a;菜鸟分析 链接&#xff1a;https://zhuanlan.zhihu.com/p/34112508一天偶然发现知乎上有篇关于对python编程中的if __name__ main的理解陈述&#xff0c;看完之后&#xff0c;自己觉得不够简单明了&#xff0c;于是在其文章底部写了一句话&#xff0c;突然收获…

4.openstack之mitaka搭建glance镜像服务

部署镜像服务 一&#xff1a;安装和配置服务 1.建库建用户 mysql -u root -p CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO glancelocalhost IDENTIFIED BY 密码; GRANT ALL PRIVILEGES ON glance.* TO glance% IDENTIFIED BY 密码; flush privileges; 2.keys…

mysql php 变量赋值,在MySQL UPDATE(PHP / MySQL)中使用变量

I am using this code so I can update a record in database:$query mysql_query("UPDATE articleSET com_count ". $comments_countWHERE article_id .$art_id ");My question is: How can I use variables in a MySQL UPDATE statement.解决方案$query m…

mongodb 教程一

mongodb是nosql&#xff08;not only sql&#xff09;的一种方式 。是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL - 代表着不仅仅是SQL- 没有声明性查询语言- 没有预定义的模式-键 - 值对存储&#xff0c;列存储&#xff0c;文档存储&#xff0c;图形数据库- 最…

java mysql 回滚_Java 中对数据库操作时的 回滚

Connection connnull;conn.rollback()就可以回滚//用jdbc连接数据库//举例子&#xff0c;比如你在写一个级联删除的方法的时候&#xff0c;为了保证数据完整性&#xff0c;删除的时候一定要确定该删的都删了才行&#xff0c;否则就要回滚&#xff0c;下面是删除方法的例子&…

向文件中追加内容

#echo abcbedf>>a.txt 将abcdef追加到a.txt文件末尾 往文件中写入内容&#xff0c;比如原来的a.txt文件内容是aaaaa&#xff0c; #echo bbbbb>a.txt&#xff0c;这个是bbbbb把a.txt原来的内容替换 这里注意 >是覆盖&#xff0c;>>是追加。 如果为多行输入,需…

kali linux改中文_【亲测实验】kali linux 2020 设置为中文方法

kali 2020.1可用进入我们的正题&#xff0c;修改为中文的步骤1.更换更新源打开终端&#xff0c;输入下边命令打开更新源的文件vim /etc/apt/sources.list在文件结尾加入下边更新源#中科大deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src http:…

php取整函数ceil,floor,round,intval函数的区别

1、ceil — 进一法取整说明float ceil ( float $value )返回不小于 value 的下一个整数&#xff0c;value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float&#xff0c;因为 float 值的范围通常比 integer 要大。ceil() 例子 <?php echo ceil(4.3); // 5 echo ceil…

mysql的源码目录_Mysql DBA系统学习(2)了解mysql的源码目录及源文件

了解mysql的源码目录包括客户端代码&#xff0c;服务端代码&#xff0c;测试工具和其他库文件Bdb 伯克利DB表引擎BUILD 构建工程的脚本Client 客户端Cmd-line-utils 命令行工具Config 构建工程所需的一些文件Dbug Fred Fish的调试库Docs 文档文件夹Extra 一些相对独立的次要的工…

开始我的blog之旅

这是我第一次开始写blog的时刻&#xff0c;我也想好了怎么开始&#xff0c;鉴于我喜欢刨根问底的原则&#xff0c;我决定要翻开C语言&#xff0c;重新复习。同时以写blog的形式来印证。 写作路线嘛&#xff0c;就按照《C Primer Plus》第五版的章节套路来&#xff0c;中间在参杂…