SLIC超像素分割MATLAB代码执行时的一些细节

来源:互联网 发布:网络宣传怎么做 编辑:程序博客网 时间:2024/05/23 11:45

代码网址: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”: 将此类型用作表达式非法

在移植c++代码到c的时候,经常会出现一个奇怪的错误,
error C2275: “XXX”: 将此类型用作表达式非法
表达式非法,这个错误是由于c的编译器要求将变量的申明放在一个函数块的头部,而c++没有这样的要求造成的。
解决的办法就是把变量的申明全部放在变量的生存块的开始。








原创粉丝点击