将变量从C ++传递到Matlab的快速高效方法

时间:2015-07-31 02:39:14

标签: c++ matlab binaryfiles file-writing

我开发了一个C ++程序,它计算循环中的一组坐标(x,y)。每次迭代我想将坐标发送到Matlab进行进一步处理,速度约为每秒25次。我有一个Matlab函数,然后采用这个坐标并实时使用它;但是,我还没有找到一种将变量从C ++快速发送到Matlab的有效方法。

我尝试在这里使用Matlab引擎:Passing Variable from C++ to Matlab (Workspace),除了我希望在现有的Matlab会话中使用这个变量而不是简单地通过C ++运行Matlab命令。

我还尝试将C ++坐标写入二进制文件,然后在Matlab中读取此文件 - 这种方法非常快,但我在两种语言之间的时间问题上都存在问题。将Matlab代码设置为无限循环读取二进制文件,同时运行将坐标写入文件的C ++程序,意味着Matlab以非常奇怪的顺序读取(即,当我写入时,Matlab读取15,200,70,12)我重视文件)。我怀疑这是由于每个程序试图打开以及读取或写入文件之间的时间差。

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 个答案:

答案 0 :(得分:1)

我无法提供代码示例,因为我这样做了几年,但我知道您可以使用创建COM对象并将其与matlab连接。这是描述如何使用matlab连接COM对象的链接。 http://www.mathworks.com/help/matlab/using-com-objects-in-matlab.html