Я пытаюсь использовать mexCallMATLAB()
, чтобы прочитать изображение. Ниже приводится код:Вызов функции MATLAB «imread» из MEX
#include "mex.h"
#include <matrix.h>
#include <string.h>
#include <stdio.h>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mxChar *string, *img;
int dims[2] = {1, 100};
char *str = "D:\\Acads\\NUS\\CBIS\\TEST\\SampleImages\\set1139R0stack1000Color0St0.tiff.tif"; // Path of the image file
string = mxCreateCharArray(2, (const int *)dims);
memcpy(mxGetPr(string), str, sizeof(char) * (strlen(str) + 1));
mexCallMATLAB(1, img, 1, &string, "imread");
}
код компилируется без ошибок, но на выполнении выдает следующее сообщение об ошибке:
??? Error using ==> imread at 315
File "%^&*$#@! (Some special character string)" does not exist.
Когда я напечатаю значение переменной string
, я получаю правильный путь, но я не понимают, что происходит при вызове функции MATLAB.
'mxArray' - это контейнер для массивов MATLAB. 'mxChar' - 2-байтовый символ. Они совершенно разные! Ваш код работает, потому что 'string' установлен и используется как указатель' mxArray'. Я ожидаю, что компилятор предупредил об этом, но mex() подавляет предупреждения компиляции, когда ошибок нет. – user664303