SLIC超像素分割MATLAB代码执行时的一些细节
代码网址:http://ivrl.epfl.ch/research/superpixels#SLICO
下载了SLIC超像素分割的MATLAB程序:
“Mex
file and MATLAB demo script”
下载解压之后,主程序是“SLICdemo.m”,它会调用C语言程序“slicmex.c”。
所以运行程序的时候,首先通过MATLAB将C/C++函数编译成MEX函数,在MATLAB中就可以调用了。方法是:
MATLAB的command window下输入:
>>mex silcmex.c
会通知你选择编译器:
Select a compiler:
[1] Microsoft Visual C++ 2010 in d:\ruanjiananzhuang\VS2010UltimTrialCHS
[0] None
Compiler: 1
输入1,回车,这时就会报出警告和错误,警告不用管,主要解决错误:
slicmex.c(387) : error C2275: “mwSize”: 将此类型用作表达式非法
......
这个错误是最先出现的最大的错误,先解决它。
用文本编辑器打开文件“slicmex.c”,处理(387)行:
mwSize numdims = mxGetNumberOfDimensions(prhs[0]) ;
改法就是:将numdims的声明和定义拆开:
mwSize numdims;
numdims = mxGetNumberOfDimensions(prhs[0]) ;
再将其声明与(351)行定义的mexFunction函数下面的一大串变量声明放在一起。截图如下:
保存文件,再返回到MATLAB的命令窗口处,重新编译c程序:
>> mex slicmex.c
再运行程序:
>> SLICdemo
网上有人给出了原理,我把文字复制过来:
地址:http://www.cppblog.com/colorful/archive/2015/02/05/209744.aspx
error C2275: “XXX”: 将此类型用作表达式非法
error C2275: “XXX”: 将此类型用作表达式非法
表达式非法,这个错误是由于c的编译器要求将变量的申明放在一个函数块的头部,而c++没有这样的要求造成的。
解决的办法就是把变量的申明全部放在变量的生存块的开始。