现在的位置: 首页 > 综合 > 正文

Vc++和matlab双剑合璧

2013年10月04日 ⁄ 综合 ⁄ 共 1495字 ⁄ 字号 评论关闭

源地址(我的技术博客):http://linger.devhub.com/blog/716199-vcmatlab/

人家其他图像处理的小组都做完了project,我们小组还在争论用什么写。真蛋疼。自从组队后,我由用java写转成用c++,看到人家用matlab方便,然后我们组改成matlab。到现在,出现了分歧,有人喜欢c++,有人喜欢matlab。对于我这种喜欢偷懒的人,必然爱matlab啊。

       然后我突然想起之前一段时间,高中同学刘景辉跟我提起他在搞一个project,结合使用vc++和matlab。不过他貌似通过dll来交互。于是我查了一下资料,没想到vc++和matlab的结合使用挺流行的,并且有很多方法。我就挑了一种我认为比较容易操作的方法试试,就是调用matlab的engine。关于调用engine的函数这篇博客有http://blog.sina.com.cn/s/blog_62466e480100l642.html

       不过在调用之前要做一些配置,有点烦。

 

 

1.        必须的步骤:

1.1.    Vs中打开项目属性,点配置属性->vc++目录。

1.2.    在包含目录中添加如下

 

其中上面添加的目录为engine.h头文件所在的目录。

1.3.    在库目录下添加如下:

其中上面添加的目录为libmx.lib,libmat.lib,libeng.lib,

所在的目录

1.4.    点配置属性->链接器->输入,可以看到附加依赖项

 

1.5.    在附加依赖项中添加:libmx.lib;libmat.lib;libeng.lib三项。

此外,还要配置好环境变量,否则有些dll找不到,比如libmx.dll。

 

只要把dll所在的文件夹添加到环境变量的path中就可以了。我的电脑是F:\matlab\bin\win32。(在其他电脑运行一定要配置好这个环境变量)

关于配置问题,我参考了一下两个网页:

http://hi.baidu.com/magicdmer/blog/item/4eea2612871267dca6ef3f36.html

http://xiaozu.renren.com/xiaozu/106512/334303858

 

以下是加入高斯噪声的代码:

 

 

CString strPathName;
strPathName = GetPathName();
//我是用了ta的mfc的demo,GetPathName函数是原有的,就是返回图像的路径
mxArray *path,*img;
 
Engine *ep;
ep = engOpen(NULL);//打开引擎
if(ep == NULL)
exit(EXIT_FAILURE);
engSetVisible(ep,false);
 
path  = mxCreateString(strPathName);
 
 engPutVariable(ep,"fileName",path);//在matlab空间加入fileName变量,并赋值
 
 
 
 engEvalString(ep,"K=imread(fileName)");//发送读图命令
 
 
 
 engEvalString(ep,"J=imnoise(K,'gaussian',0,0.01)");//加入高斯噪声
 
img = engGetVariable(ep,"J");//这句没什么用,只是当初我想在c++显示图片,后来觉得,干脆直接用matlab显示图片吧
 
 engEvalString(ep,"figure,imshow(J)");//调用matlab显示图片
 
效果图:
 

抱歉!评论已关闭.