Как использовать mcc, передать буфер изображений C ++ jpg в MATLAB и получить обрезанное изображение обратно из MATLAB

Я использую mcc на Linux для создания приложения C ++, которое использует MATLAB для вычислений и обработки изображений. Приложение C ++ вызывает функции MATLAB и должно передавать буфер изображений JPEG в качестве параметра в MATLAB. Я пробовал различные комбинации использования двойного, беззнакового символа и т. Д., Но не смог успешно передать изображение в качестве параметра. Пожалуйста, посмотрите ниже тестовый код и дайте мне знать, что нужно исправить: (Я использую библиотеку ImageMagick, чтобы прочитать изображение)

    Blob blob1;
Image img;
img.read("test.jpg");
img.write(&blob1);
BlobBuffer buf;
buf.buffer = (void*)blob1.data();
buf.len = blob1.length();

mwArray ret;
double data[] = {200};
double data1[] = {300};
double data2[] = {10};
double data3[] = {10};
double d1[] = {1};

mwArray imgbuf(1, buf.len, mxUINT8_CLASS, mxREAL);
unsigned char d[buf.len];
for (int i=0; i<buf.len; i++) {
unsigned char *dptr = (unsigned char *)buf.buffer + (i);
d[i++] = *dptr;
}

imgbuf.SetData(d, buf.len);
mwArray in(1, 1, mxDOUBLE_CLASS, mxREAL);
mwArray in1(1, 1, mxDOUBLE_CLASS, mxREAL);
mwArray in2(1, 1, mxDOUBLE_CLASS, mxREAL);
mwArray in3(1, 1, mxDOUBLE_CLASS, mxREAL);
in.SetData(data, 1);
in1.SetData(data1, 1);
in2.SetData(data2, 1);
in3.SetData(data3, 1);

// create output array, and call library functions
crop_img(1, ret, imgbuf, in, in1, in2, in3);
cout << "cropped img:\n" << ret << endl;

Вот код MATLAB crop_img:

 function img = crop_image(imgbuf, x, y, w, h)
a = [ x y w h ];

I = imgbuf;

img = imcrop(I,a);

imshow(img);
end

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]