Я пытаюсь написать функцию mex для вызова другой функции F. F использует библиотеку opencv, поэтому мне нужно преобразовать mxarray в cv :: mat. Я использую цикл inested for, чтобы назначить каждому пиксельному значению или вектору значений два созданных cv :: mat. Код размещен ниже.Программа сбрасывается при преобразовании mxarray в cv :: mat
Однако программа прерывается после запуска цикла for-while. Я попытался использовать mexPrintf для печати значений, таких как A (i, j, 2), и значения верны (unsigned char). Входные данные Matlab являются матрицами типа uint8, и именно по этой причине я бросаю вещи в unsigned char в код cpp.
Я понятия не имею, почему он рушится. Я также пытался использовать процесс присоединения visual studio для отладки, но он, похоже, не работает, и каждый раз, когда я подключаю процесс и вызываю функцию mex в Matlab, я просто получил сообщение о нарушении доступа.
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) для этого другого процесса, который вы хотите отлаживать? Если да, можете ли вы проверить, может ли отладчик найти его? –