在无限循环期间的Matlab evalin

时间:2012-01-13 13:46:15

标签: matlab

对于课程成像处理,我正在构建一个Matlab / C ++应用程序。 Matlab应该识别手势,并且应该将它们发送到C ++应用程序。我们的想法是在matlab中创建一个队列,我们​​可以从C ++中读取。这很有效,但我们有一个问题:

我们在无限循环中从网络摄像头获取数据。在该循环内部,我们使用assignin('base',....)和evalin('base',...)将我们的命令发送到工作区。但是,这些命令仅在循环完成后通过单击我们的停止按钮发送。这意味着C ++应用程序无法实时读取值,只能在我们完全停止图像处理后读取值。

那么可以强制matlab将变量写入基础工作区,以便我们可以使用matlab中的c ++应用程序读取这些值吗?

编辑: 下面简要介绍了该程序的工作原理:

应用程序从C ++应用程序开始。 C ++应用程序启动Matlab引擎,并调用Matlab应用程序的初始化脚本。初始化脚本启动GUIDE gui,按下按钮,手势识别部分启动。 Matlab应用程序的手势识别部分是一个无限循环,它从网络摄像头输入连续获取帧并处理该图像。找到手势后,它会使用evalin将手势ID写入基础工作区中的队列。同时,C ++应用程序也处于无限循环中,不断检查该Matlab队列中是否有项目。但是,在Matlab脚本退出while循环之前,它不会找到任何项目。 当我手动将项添加到队列时,C ++应用程序将立即读取这些值,当我不使用while循环连续捕获帧但是手动获取单个帧的按钮时,C ++应用程序也可以立即读取值。所以似乎while循环阻止C ++应用程序读取队列。

2 个答案:

答案 0 :(得分:0)

值应立即写入基础工作区,否则您将无法使用evalin将其取回。所以我很想暗示你误解了这个问题。

你有一个突出这个问题的简单例子吗?

答案 1 :(得分:0)

我创建的解决方案非常简单:我将while循环中的所有内容放在一个单独的函数中,并在c ++应用程序的每个帧更新时调用该函数,而不是使用2个单独的while循环。