我试图写一个MEX函数调用另一个函数的F.F使用OpenCV库,所以我需要的mxarray转换为CV ::垫。我使用嵌套for循环来将每个像素值或向量的值分配给两个创建的cv :: mat。该代码发布如下。程序崩溃::垫
但是,程序运行for循环一段时间后崩溃。我试图使用mexPrintf打印出如A(i,j,2)的值,并且值是正确的(无符号字符)。来自Matlab的输入是uint8类型的矩阵,这就是我在cpp代码中将东西转换为无符号字符的原因。
我不知道为何导致崩溃。我也试着使用Visual Studio的附加程序进行调试,但它似乎没有工作,我每次连接的过程,并调用Matlab中的MEX函数我刚刚得到一个访问冲突的消息。
void mexFunction(int nlhs,mxArray *plhs[], int nrhs,const mxArray *prhs[])
{
#define A_IN prhs[0]
#define B_IN prhs[1]
#define Y_out plhs[0]
#define A(i,j,k) A[i+j*R+k*(R*C)]
#define B(i,j) B[i+j*R]
#define Y(i,j) Y[i+j*R]
const int *d_pr = mxGetDimensions(A_IN);
int C = d_pr[1];
int dims[2] = { R,C };
Y_out = mxCreateNumericArray(2, dims, mxUINT8_CLASS, mxREAL);
unsigned char *A, *B,*Y;
A = (unsigned char *)mxGetData(A_IN);
B = (unsigned char *)mxGetData(B_IN);
Y = (unsigned char *)mxGetData(Y_out);
cv::Mat image(R, C, CV_8UC3);
cv::Mat trimap(R, C, CV_8UC1);
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
image.at<cv::Vec3b>(j, i)[0] = A(i, j, 2);
image.at<cv::Vec3b>(j, i)[1] = A(i, j, 1);
image.at<cv::Vec3b>(j, i)[2] = A(i, j, 0);
trimap.at<unsigned char>(j,i) = B(i, j);
}
}
//some other stuff
}
你看着调用栈知道的代码导致崩溃行? –
@VadaPoché我无法使用visual studio的附加过程进行调试。我仍然能够检查调用堆栈吗? – user3928010
您是否有调试信息(pdb)为您要调试的其他进程生成?如果是这样,你是否能够检查调试器是否能够找到它? –