2015-07-31 5 views
1

Я разработал программу на C++, которая вычисляет набор координат (x, y) внутри цикла. На каждой итерации я хочу отправить координаты Matlab для дальнейшей обработки со скоростью около 25 раз в секунду. У меня есть функция Matlab, которая затем берет эту координату и использует ее в режиме реального времени; однако я не нашел эффективного способа быстро отправлять переменные из C++ в Matlab.Быстрый и эффективный метод передачи переменных из C++ в Matlab

Я пробовал использовать механизм Matlab здесь: Passing Variable from C++ to Matlab (Workspace), за исключением того, что я хочу, чтобы эта переменная использовалась в существующем сеансе Matlab, а не просто запускала команды Matlab через C++.

Я также пытался написать координату C++ для двоичного файла, а затем прочитать этот файл в Matlab - этот метод выполняется очень быстро, но у меня возникают проблемы с синхронизацией между обоими языками. Установка кода Matlab в бесконечный цикл, считывающий двоичный файл, при запуске программы на C++, записывающей координату в файл, означает, что Matlab читается в очень странном порядке (например, Matlab читает 15, 200, 70, 12, когда я пишу i для файла). Я подозреваю, что это связано с плохим выбором времени между каждой программой, пытающейся открыть, и либо читать, либо записывать файл.

C++:

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/opencv.hpp" 
#include <iostream> 
#include <math.h> 
#include <fstream> 
#include <stdio.h> 
#include <Windows.h> 

using namespace cv; 
using namespace std; 

int main() 
{ 

    int a = 0 

    for (int i = 0; i < 100000; ++i) 
    { 
     a = i; 
     std::ofstream ofile("foobar.bin", std::ios::binary); 
     ofile.write((char*) &a, sizeof(int)); 
     ofile.close(); 
    } 

    return 0; 
} 

Matlab:

A = fopen('foobar.bin'); 
fread(A) 
fclose(A); 

Есть ли способ, чтобы быстро и точно передавать данные между C++ и Matlab, написав в двоичную или каким-либо другим способом, который я могу реализовать?

спасибо!

+1

Вы только что пробовали использовать стандартный путь в MEX? Я не могу себе представить, что писать на диск будет быстрее. Я бы предположил, что это будет на самом деле медленнее, так как оно меньше в спектре буфера памяти. – Justin

+0

Как вы проходите в MEX? Это просто вызов функций C++ из Matlab или вы фактически передаете переменные из программы на C++ в Matlab? – MSTTm

+1

Просто посмотрите примеры на google. Вот [один] (http://matlab.izmiran.ru/help/techdoc/matlab_external/ch04cre5.html). Вы можете передавать переменные в и из функции C++ непосредственно через интерфейс MEX. – Justin

ответ

1

Я не могу представить образцы кода, потому что это было несколько лет с тех пор, как я это сделал, но я знаю, что вы можете использовать создание COM-объекта и связать его с Matlab. Вот ссылка, описывающая, как связать COM-объект с Matlab. http://www.mathworks.com/help/matlab/using-com-objects-in-matlab.html

+0

Спасибо за ответ! Я новичок во всем этом, поэтому мне бы хотелось увидеть некоторые простые примеры использования этих COM-объектов между C++ и Matlab. Насколько я вижу, это довольно сложный процесс? – MSTTm

Смежные вопросы