2
我有C語言編寫的一個功能來讀取圖像如下:如何使用MEX從特定位置讀取圖像?
圖片* read_Image(字符*文件名,詮釋showmessages)
現在我想執行的MATLAB此功能通過創建網關功能和包裝功能在MEX。我從來沒有寫過Matlab C/Mex代碼。經過[http://cnx.org/contents/[email protected]/Writing-C-Functions-in-MATLAB-][1]並寫下以下代碼後,我嘗試了我的運氣。我仍然需要做很多事情,我中途停滯不前。任何人都可以引導我?
以下是我寫的代碼:
#include "mex.h"
#include "CVIPtools.h"
#include "CVIPimage.h"
#include "CVIPdef.h"
#include "CVIPmap.h"
#include "limits.h"
#include "threshold.h"
#include <float.h>
#include "CVIPmatrix.h"
//Here I will write a wrapper function.
/* main gateway function*/
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mxArray *fnameData;
int fnameLength;
char *str;
//mxArray *smData;
int sm;
double *outArray;
int r,c,bands,n;
const mwSize *dim_array;
fnameData = prhs[0];
//smData = prhs[1];
fnameLength = mxGetN(fnameData)+1;
str = mxCalloc(fnameLength, sizeof(char));
mxGetString(fnameData, str, fnameLength);
// sm = (int)(mxGetScaler(smData));
sm = mxGetScaler(prhs[1]);
if (nrhs != 2) {
mexErrMsgIdAndTxt("MATLAB:mxisfinite:invalidNumInputs",
"Two input arguments required.");}
if (nlhs != 1) {
mexErrMsgIdAndTxt("MATLAB:mxisfinite:invalidNumInputs",
"One output argument required.");}
n = mxGetNumberOfElements(plhs[0]);
dim_array = mxGetDimensions(plhs[0]);
r = dim_array[0];
c = dim_array[1];
bands = dim_array[2];
if(bands==3){
plhs[0] = mxCreateNumericArray(3, dim_array, mxDOUBLE_CLASS, mxREAL);
}
else
{ plhs[0] = mxCreateDoubleMatrix(r,c,mxREAL);
bands=1;
}
outArray = mxGetData(plhs[0]);
// Here I will call wrapper function.
}
我只是嘗試使用編譯MEX FILENAME.C這個代碼,我有以下錯誤。
mex image_readCVIP.c
Creating library D:\Users\Deepen\AppData\Local\Temp\mex_sedh1H\templib.x and object D:\Users\Deepen\AppData\Local\Temp\mex_sedh1H\templib.exp
image_readCVIP.obj : error LNK2019: unresolved external symbol mxGetScaler referenced in function mexFunction
image_readCVIP.mexw64 : fatal error LNK1120: 1 unresolved externals
D:\PROGRA~1\MATLAB\R2012A\BIN\MEX.PL: Error: Link of 'image_readCVIP.mexw64' failed
[1]: http://cnx.org/contents/[email protected]/Writing-C-Functions-in-MATLAB-
爲什麼不使用'imread'而不是滾動自己的? – Dima
我們有一個可用於圖像處理和計算機視覺應用的CVIPTools。現在我們試圖在MATLAB中移植CVIPTool庫,它可以用於圖像採集,圖像處理和計算機視覺應用程序,而不會相互依賴。 –