我试图实现一个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