2012-01-13 3 views
0

코스 이미징 처리를 위해 Matlab/C++ 애플리케이션을 구축 중입니다. Matlab은 손짓을 인식해야하며, C++ 애플리케이션으로 보내야합니다. 우리의 아이디어는 C++에서 읽을 수있는 matlab에 대기열을 만드는 것이 었습니다. 이것은 완벽하게 작동하지만 하나의 문제가 있습니다 :무한 루프 동안의 Matlab evalin

무한 while 루프에서 웹캠의 데이터를 가져옵니다. 그 루프 안에서 assignin ('base', ....)와 evalin ('base', ...)을 사용하여 명령을 작업 영역으로 보냅니다. 그러나 해당 명령은 루프가 종료 버튼을 클릭하여 완료된 후에 만 ​​전송됩니다. 즉, C++ 응용 프로그램은 실시간으로 값을 읽을 수 없으며 이미지 처리를 모두 중지 한 후에 만 ​​값을 읽을 수 있습니다.

그래서 MATLAB에서 matlab의 C++ 응용 프로그램으로 값을 읽을 수 있도록 matlab에 변수를 기본 작업 공간에 기록하도록 할 수 있습니까?

편집 : 프로그램이 어떻게 작동하는지에 대한 간단한 설명 아래 :

응용 프로그램은 C++ 응용 프로그램을 시작합니다. C++ 응용 프로그램은 Matlab 엔진을 시작하고 Matlab 응용 프로그램의 초기화 스크립트를 호출합니다. 초기화 스크립트는 GUIDE GUI를 시작하고 버튼을 눌러 제스처 인식 부분을 시작합니다. Matlab 애플리케이션의 제스처 인식 부분은 웹캠 입력에서 프레임을 지속적으로 가져 와서 그 이미지를 처리하는 무한 while 루프입니다. 제스처가 발견되면 evalin을 사용하여 제스처 ID를 기본 작업 공간의 대기열에 씁니다. 한편 C++ 응용 프로그램은 Matlab 대기열에 항목이 있는지 계속 확인하는 무한 루프에 있습니다. 그러나 Matlab 스크립트가 루프에서 빠져 나올 때까지는 항목을 찾지 못합니다. 수동으로 대기열에 항목을 추가하면 C++ 응용 프로그램에서 즉시 해당 값을 읽습니다. 프레임을 연속적으로 캡처하기 위해 while 루프를 사용하지 않고 개별 프레임을 수동으로 가져 오는 단추를 사용하면 C++ 응용 프로그램은 값을 즉시 읽을 수도 있습니다. 따라서 while 루프는 C++ 응용 프로그램이 큐를 읽을 수 없도록 차단하고있는 것으로 보입니다.

답변

0

내가 만든 솔루션은 매우 간단합니다. 나는 while 루프 내부의 모든 것을 별도의 함수에 넣고, 두 개의 분리 된 while 루프 대신 C++ 응용 프로그램의 모든 프레임 업데이트에이 함수를 호출했습니다.

0

값은 즉시 기본 작업 영역에 기록해야합니다. 그렇지 않으면 evalin을 사용하여 값을 다시 가져올 수 없습니다. 그래서 나는 당신이 그 문제를 잘못 진단했음을 암시하기를 원합니다.

이 문제를 강조하는 간단한 예가 있습니까?

+0

아마 기본 작업 영역에 즉시 기록되지만 스크립트 외부의 코드에는 액세스 할 수 없습니다. 내 질문에 잠시 후 프로그램에 대한 간단한 설명을 추가하겠습니다. – Tiddo