【问题标题】:Quick and Efficient Method to Pass Variables from C++ to Matlab将变量从 C++ 传递到 Matlab 的快速有效的方法
【发布时间】:2015-10-22 14:33:03
【问题描述】:

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

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

我还尝试将 C++ 坐标写入二进制文件,然后在 Matlab 中读取该文件 - 这种方法非常快,但我在两种语言之间的时间上遇到了问题。将 Matlab 代码设置为读取二进制文件的无限循环,同时运行 C++ 程序将坐标写入文件,这意味着 Matlab 以非常奇怪的顺序读取(即,当我编写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 中通过标准方式?我无法想象写入磁盘会更快。我认为它实际上会更慢,因为它在内存缓冲区频谱中较低。
  • MEX是怎么通过的?是简单地从 Matlab 调用 C++ 函数,还是实际上将变量从 C++ 程序传递给 Matlab?
  • 只看谷歌上的例子。这是one。您可以直接通过 MEX 接口将变量传入和传出 C++ 函数。
  • 感谢您的示例!但是,我认为当我需要该值时,我不能简单地从 Matlab 调用 C++ 函数,因为该值是在 C++ 的无限循环中创建的,同时复杂的过程正在进行。理想情况下,在 C++ 的无限循环中,我想在开始下一次迭代之前将变量传递给 Matlab。

标签: c++ matlab binaryfiles file-writing


【解决方案1】:

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

【讨论】:

  • 感谢您的回复!我对这一切都很陌生,所以我很想看到一些在 C++ 和 Matlab 之间使用这些 COM 对象的简单示例。据我所知,这是一个相当复杂的过程?
猜你喜欢
  • 2012-06-08
  • 2015-10-21
  • 2021-06-23
  • 2015-10-07
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
相关资源
最近更新 更多