背景
MATLAB有强大的矩阵运算能力以及丰富的函数库,可以用于算法的仿真以及快速验证某些算法思路。MATLAB的UI层是利用基于JVM利用Java实现的,而部分算法的底层则是封装了C/C++以及Intel提供的汇编指令集。因此MATLAB在用于计算时的速度是非常之快的。但是有的时候我们经常看到,虽然一些论文或者文章中描述了算法,并且作者也在个人主页上po处了源代码。但是这些算法的细节我们的是看不到的,可能是由于专利的原因,也可能是算法中的某些参数是经过了大量验证而作者并不想公布的。因此,对于很多图像类的算法,作者们都是采用了将算法的核心部分利用MATLAB自带的C编译器mexcc封装为一个.mexw64(64位系统)或.mexw32(32位系统)文件,然后在MATLAB的.m文件中通过函数名直接调用这些封装的函数。这样既保证了算法的速度,又可以保留必要的细节。那么如何实现这个呢?其实很简单,下文会详细介绍
方法
之前写过一篇关于如何在VS中调用MATLAB函数的方法,既要安装MATLAB RUNTIME COMPILER又要设置工程的附加库和包含目录,同时C和C++文件调用MATLAB还有区别,非常的麻烦。但是如果发过来,通过MATLAB来调用C/C++函数就相对而言过程简化了很多。
1. C++端的代码
为了方便,我们用一个简单的demo来举例子。假设我们需要封装原来的C++函数:
// Arithmetic_Operation.cpp
// 本函数实现了两个double型参数输入的四则运算,并保存在res数组中,顺序为加减乘除
#include <cstdtio>
void Arithmetic_Operation( double* res, double a, double b )
{
res[0] = a + b;
res[1] = a - b;