我試圖實現一個mexFunction()
到「純」C++(OpenCV),但返回值mxGetPr()
對我來說根本不清楚。mxGetPr()的返回值 - 等價循環
下面的代碼的目的是要實現:
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int *D = new int[N*L];
// where N and L are dimensions (cols and rows) of matrix prhs[3]
// prhs[3] is a NxL matrix containing floating point value
for (int i=0; i<N*L; i++)
D[i] = mxGetPr(prhs[3])[i];
}
我的問題是,什麼樣的價值是由mxGetPr(prhs[3])[i]
和mxGetPr(prhs[4])[i]
給出?它是如何循環矩陣?
我試圖做這樣的事情:
for (int i=0; i<l; i++)
{
for(int j=0; j<n; j++)
{
D[iCounter] = (int)d.at<uchar>(i,j);
iCounter++;
}
}
通過d
矩陣是相同的輸入值prhs[3]
循環,但顯然這是不正確的。 我猜想返回值的順序/類型與原始mexFunction
不一樣。
編輯
現在我的簡歷::墊d;而不是prhs [3],並嘗試像mexfunction一樣做。
int *D = new int[N*L];
int iCounter = 0;
for (int i=0; i<L; i++)
{
for(int j=0; j<N; j++)
{
D[iCounter] = (int)d.at<uchar>(i,j);
iCounter++;
}
}
但在這裏(INT)d.at(I,J)返回 「d」 矩陣......凡在roiginal代碼的指針被mxGetPr()返回的值。
我已編輯了一下代碼。 * D指向具有int值的容器的指針。但是輸入矩陣具有浮點值,那麼mxGetPr(prhs [3])[i]實際上是否返回到D [i]?你可以幫我嗎? – Kristan
@Kristan在存儲之前將數據轉換爲int。我將編輯我的帖子。這並不安全,但這就是你所做的。來自MATLAB的輸入矩陣也是**浮點數?也就是說,當你調用你的MEX函數時,是你的MEX函數中的第三個輸入參數的輸入類型**還有**類型的double或浮點數?在編輯我的帖子之前,這很重要。 – rayryeng
是的,輸入矩陣有浮點值。我想要做的是,而不是使用mxGetPr(),我想使用其他(最好是OpenCV)函數返回與mxGetPr()一樣的值。原因是我不再使用原始的Matlab代碼,而是「純粹」的C++(OpenCV)。 – Kristan