2012-01-13 207 views
0

對於課程成像處理,我構建了一個Matlab/C++應用程序。 Matlab應該識別手勢,並且應該將它們發送給C++應用程序。我們的想法是在matlab中創建一個我們可以從C++讀取的隊列。這工作完美,但我們有一個問題:Matlab無限期while循環中的evalin

我們從網絡攝像頭的數據在一個無限的while循環。在該循環內部,我們使用assignin('base',....)和evalin('base',...)將我們的命令發送到工作區。但是,這些命令僅在循環完成後單擊我們的停止按鈕纔會發送。這意味着C++應用程序不能實時讀取值,只能在我們停止完成圖像處理後才能讀取值。

所以有可能迫使matlab將變量寫入基礎工作區,以便我們可以使用matlab的C++應用程序讀取這些值?

編輯: 下面的程序是如何工作的一個簡短描述:

的應用開始與C++應用程序。 C++應用程序啓動Matlab引擎,並調用Matlab應用程序的初始化腳本。初始化腳本啓動GUIDE GUI,通過按下按鈕,手勢識別部分開始。 Matlab應用程序的手勢識別部分是一個無限的while循環,它不斷從網絡攝像頭輸入中獲取一幀並處理該圖像。找到手勢後,它會使用evalin將手勢ID寫入基本工作區中的隊列。與此同時,C++應用程序也處於無限循環中,持續檢查該Matlab隊列中是否有項目。然而,在matlab腳本離開while循環之前,它不會找到任何項目。 當我手動添加項目到隊列時,C++應用程序將立即讀取這些值,並且當我不使用while循環來連續捕獲幀,而是一個手動獲取單個幀的按鈕時,C++應用程序也可以立即讀取這些值。所以while循環似乎阻止C++應用程序讀取隊列。

回答

0

我創建的解決方案非常簡單:我將所有內容放在while循環中放在一個單獨的函數中,並且每次更新C++應用程序都調用該函數,而不是使用2個單獨的while循環。

0

這些值應立即寫入基本工作區,否則使用evalin將無法​​將其取回。所以我很想暗示你誤診了這個問題。

你有一個簡單的例子來強調這個問題嗎?

+0

也許它們會立即寫入基本工作區,但腳本外的代碼無法訪問它們。我會在一分鐘內爲我的問題添加一個簡短的程序說明。 – Tiddo 2012-01-14 13:54:12