Я разработал программу на 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, написав в двоичную или каким-либо другим способом, который я могу реализовать?
спасибо!
Вы только что пробовали использовать стандартный путь в MEX? Я не могу себе представить, что писать на диск будет быстрее. Я бы предположил, что это будет на самом деле медленнее, так как оно меньше в спектре буфера памяти. – Justin
Как вы проходите в MEX? Это просто вызов функций C++ из Matlab или вы фактически передаете переменные из программы на C++ в Matlab? – MSTTm
Просто посмотрите примеры на google. Вот [один] (http://matlab.izmiran.ru/help/techdoc/matlab_external/ch04cre5.html). Вы можете передавать переменные в и из функции C++ непосредственно через интерфейс MEX. – Justin