接上一篇文章吧,虽然上一篇距离现在几个月了。2015年第一发。
对于BM3D算法,在作者的主页他们给出了MATLAB的代码,在MATLAB上跑了一下,果然很好很强大,同时也跑了跑实验验证了一下linux下的C++版代码,需要装libpng和fftw3这两个库。后来在师兄的帮助下实现了GPU版的程序,可以做到每秒5-10帧左右,又大幅的提升了算法的速度,但是由于自己太懒,于是想到借用MATLAB来进行对图像的IO操作,在不同域之间做变换以及计算性能。 因而在去年底和今年初的一个月时间摸索了一下MATLAB和VS2010混合编程互相调用的方法,写下来以纪念一下走过的弯路。虽然网上其他的地方都已经有很多格式的有关于此的教程,但是我在搜索的过程中发现这些教程要么就不全要么就一笔带过,这篇文章打算从自己实际项目的角度出发,写一写遇到的问题以及使用的方法。
一、在VS2010中调用MATLAB的方法:
1. 先是配置MATLAB,打开MATLAB 我用的是R2011b,在命令行中输入:
mex -setup
然后根据提示选择编译器,我用的VS2010,然后一直选择y,完成之后,再在命令行中输入:
mbuild -setup
然后根据提示选择编译器,我用的VS2010,然后一直选择y,完成之后,MATLAB端就配置好了
2. 再配置VS2010,新建一个工程,比如matlab_demo,在工程名右键单击,选择:
属性(property) -->
1). VC++目录 -->
(1). 包含目录 (加入matlab的外部接口目录, 比如 我的是:D:\Program Files\MATLAB\R2011b\extern\include)
(2). 库目录 (加入matlab的库目录, 比如 我的是:D:\Program Files\MATLAB\R2011b\extern\lib\win64\microsoft,注意需要根据操作系统位数选择win64还是win32)
2). 链接器(linker) -->输入(input) --> 附加依赖项(Additional Dependencies)
添加三个依赖库:libmat.lib libeng.lib libmx.lib
(这三个库都在D:\Program Files\MATLAB\R2011b\bin\win64中)
3.在源代码中新建一个.cpp文件,加入代码(见下文)就可以调用了
到这里配置完毕
二、在VS2010中调用MATLAB的代码:
1. 第一步是添加MATLAB在VS中的头文件以及lib库:#include "matrix.h"
#include "libr2y.h"
#include "libtrans.h"
#include "mclmcr.h"
#include "mclcppclass.h"
#pragma comment( lib, "mclmcr.lib" )
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )
#pragma comment( lib, "mclmcrrt.lib" )
#pragma comment( lib, "libtrans.lib")
#prag