Vc++和matlab双剑合璧

源地址(我的技术博客):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显示图片
效果图:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值