将C ++库转换为MATLAB mex

迪吉

我有一个很大的C ++代码,我想将此代码集成到MATLAB中,以便可以在我的matlab代码中使用它。如果是单个代码,则使其mex文件成为最佳选择。但是,由于它是现在需要编译和构建才能运行的代码,所以我不知道如何使用此代码中的功能。
使整个文件的mex文件成为唯一选择还是有其他解决方法?另外,我想对如何制作整个代码的mex文件然后进行构建提供一些帮助。

为了获得更多的见解,这是我正在尝试在matlab中集成的代码http://graphics.stanford.edu/projects/drf/densecrf_v_2_2.zip谢谢你!

安姆罗

首先,您需要编译库(静态或动态链接)。这是我在Windows机器上执行的步骤(我将Visual Studio 2013作为C ++编译器):

  • 如自述文件中所述,使用CMake生成Visual Studio项目文件。
  • 启动VS,并编译densecrf.sln解决方案文件。这将产生一个静态库densecrf.lib

接下来,修改示例文件dense_inference.cpp以使其具有MEX功能。我们将main函数替换为

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
..
}

而不是在argc/中接收参数argv,我们将从输入中获取参数mxArray所以像这样:

if (nrhs<3 || nlhs>0)
    mexErrMsgIdAndTxt("mex:error", "Wrong number of arguments");

if (!mxIsChar(prhs[0]) || !mxIsChar(prhs[1]) || !mxIsChar(prhs[2]))
    mexErrMsgIdAndTxt("mex:error", "Expects string arguments");

char *filename = mxArrayToString(prhs[0]);
unsigned char * im = readPPM(filename, W, H );
mxFree(filename);

//... same for the other input arguments
// The example receives three arguments: input image, annotation image,
// and output image, all specified as image file names.

// also replace all error message and "return" exit points
// by using "mexErrMsgIdAndTxt" to indicate an error

最后,我们编译修改后的MEX文件(将编译后的LIB放在同一example文件夹中):

>> mex -largeArrayDims dense_inference.cpp util.cpp -I. -I../include densecrf.lib

现在我们从MATLAB内部调用MEX函数:

>> dense_inference im1.ppm anno1.ppm out.ppm

产生的分割图像:

百万分之几

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将C ++库转换为MATLAB mex

来自分类Dev

将C ++对象的C ++矢量转换为mex中的mxArray

来自分类Dev

MEX:如何将矩阵从C ++ / C返回到MATLAB

来自分类Dev

如何将递归函数转换为mex代码?

来自分类Dev

通过mex将C ++链接到Matlab:传递参数

来自分类Dev

尝试在MatLab中编译C mex文件

来自分类Dev

Matlab Mex C实现Cholesky分解

来自分类Dev

C ++模板类和Matlab Mex

来自分类Dev

在C Mex文件中使用BLAS库

来自分类Dev

将Matlab代码转换为静态C ++库

来自分类Dev

(MATLAB / C ++)是否可以将函数作为参数传递给C ++ MEX函数?

来自分类Dev

如何通过MEX将多精度变量从C ++传递到Matlab(vpa?)?

来自分类Dev

犰狳+ Matlab Mex segfault

来自分类Dev

犰狳+ Matlab Mex segfault

来自分类Dev

在没有mex的情况下从Matlab操作C ++类

来自分类Dev

MKL库在mex文件和独立C ++中的行为不同

来自分类Dev

从C编译MEX文件

来自分类Dev

Matlab Mex库生命周期

来自分类Dev

Matlab Mex库生命周期

来自分类Dev

mex文件matlab。Libsvm错误

来自分类Dev

Matlab Mex编译错误

来自分类Dev

将循环从Matlab转换为C

来自分类Dev

将Matlab转换为C ++,bsxfun

来自分类Dev

将matlab函数转换为C

来自分类Dev

无法将matlab.exe进程附加到Visual Studio 2013以调试mex文件吗?

来自分类Dev

使用MATLAB mex将向量与另一个向量分配时的分割错误

来自分类Dev

Matlab 2015a将mingw64设置为mex编译器

来自分类Dev

如何在C ++ mex函数中传递Matlab mxn单元矩阵参数?

来自分类Dev

在Matlab mex文件中编译c ++ 11代码时出错