matlab--mex编译slicmex.c(超像素分割)
来源:互联网 发布:网络语茶叶蛋什么意思 编辑:程序博客网 时间:2024/06/05 00:40
编译时出现的问题:
错误使用 mex
slicmex.cC:\Users\Administrator\Desktop\(代码)SuperPixelMerge-Multi-Res-Seg(2kx2kPixels)\SLIC_mex\slicmex.c(108)
: warning C4244: “=”: 从“double”转换到“int”,可能丢失数据
......................
: error C2275: “mwSize”: 将此类型用作表达式非法
d:\program
files\matlab\r2014a\extern\include\tmwtypes.h(802)
: 参见“mwSize”的声明
C:\Users\Administrator\Desktop\(代码)SuperPixelMerge-Multi-Res-Seg(2kx2kPixels)\SLIC_mex\slicmex.c(387)
: error C2146: 语法错误: 缺少“;”(在标识符“numdims”的前面)
: error C2065: “numdims”: 未声明的标识符
出现的问题主要为:
1.从double转到int,可能数据丢失。这个问题的原因是数据类型转换格式出错,需要将double类型的数据转换为int型
2.mwSize和numdims,变量声明的问题,在代码中,第387行代码为mwSize numdims=mxGetNumberOfDimensions(prhs[0]) ; 这个地方的mwSize numdims 需要在之前定义再使用。
解决方法:
问题1.
可以强制转换为int型,在语句前添加(int)转义符,例如
xstrips = (int)(0.5+(double)(width)/(double)(STEP));ystrips = (int)(0.5+(double)(height)/(double)(STEP));
或者在声明变量时,使用double类型
double xstrips, ystrips;
问题2.
在变量声明时,添加mwSize numdims,而不是直接调用mwSize numdims=mxGetNumberOfDimensions(prhs[0]) ,部分代码如下:
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){ int width; int height; int sz; int i, ii; int x, y; int* rin; int* gin; int* bin; int* klabels; int* clabels; double* lvec; double* avec; double* bvec; int step; int* seedIndices; int numseeds; double* kseedsx;double* kseedsy; double* kseedsl;double* kseedsa;double* kseedsb; int k; const mwSize* dims;//int* dims; int* outputNumSuperpixels; int* outlabels; int finalNumberOfLabels; unsigned char* imgbytes; int numelements; int numSuperpixels = 200;//default value double compactness = 10;//default value mwSize numdims;//----在调用之前添加mwSize numdims!!! if (nrhs < 1) { mexErrMsgTxt("At least one argument is required.") ; } else if(nrhs > 3) { mexErrMsgTxt("Too many input arguments."); } if(nlhs!=2) { mexErrMsgIdAndTxt("SLIC:nlhs","Two outputs required, a labels and the number of labels, i.e superpixels."); } //--------------------------- numelements = mxGetNumberOfElements(prhs[0]) ; numdims = mxGetNumberOfDimensions(prhs[0]) ;//------在这里只需要使用numdims = mxGetNumberOfDimensions(prhs[0]),而不是mwSize numdims=mxGetNumberOfDimensions(prhs[0]) ; dims = mxGetDimensions(prhs[0]) ; imgbytes = (unsigned char*)mxGetData(prhs[0]) ;//mxGetData returns a void pointer, so cast it width = dims[1]; height = dims[0];//Note: first dimension provided is height and second is width sz = width*height;
运行结果:
详细代码可参考:http://download.csdn.net/download/qwerasdf_1_2/10141815
替换掉原来的slicmex.c文件就可以编译成功啦
阅读全文
0 0
- matlab--mex编译slicmex.c(超像素分割)
- SLIC超像素分割slicmex源代码在windows下matlab中mex出错的修正
- 超像素分割
- 超像素分割算法
- SLIC超像素分割
- SLIC超像素分割
- (superpixel)超像素分割
- Matlab 编译MEX文件
- matlab中的mex编译
- Matlab编译mex文件:
- matlab mex编译问题
- matlab/C混合编程--mex文件的编写、编译、调用
- matlab-mex编译c文件出现的问题
- 在Matlab中使用mex编译使用 c/c++
- 超像素图像分割简述
- SLIC超像素分割详解
- SLIC超像素分割详解
- Mean-shift超像素分割
- 条款2:小心对“容器无关代码”的幻想
- gradle3.0中使用Butterknife
- Java运行时生成Class的方法
- jQuery第四章jQuery与DOM
- 头文件的相互包含(续)
- matlab--mex编译slicmex.c(超像素分割)
- 你与高手的距离,并非只差了一万小时练习
- 高可用缓存
- 响应式布局—Bootstrap初识
- 获取时间差转换成时、分、秒
- 算法训练 新生舞会
- 阿拉伯数字转换汉字,到一兆以内,一般应用应该够用了
- [bzoj 2301--HAOI2011]Problem b
- XBanner轮播图