2012-03-03 21 views
1

我有一個非常簡單的程序上的OpenCV:如何讓Linux系統在OpenCV程序上等待?

#include <cv.h> 
#include <cxcore.h> 
#include <highgui.h> 

using namespace std; 

void showVideo(CvCapture *video) 
{ 
    int width = (int) cvGetCaptureProperty(video, CV_CAP_PROP_FRAME_WIDTH); 
    int height = (int) cvGetCaptureProperty(video, CV_CAP_PROP_FRAME_HEIGHT); 
    //int fps = (int) cvGetCaptureProperty(video, CV_CAP_PROP_FPS); 
    IplImage* frame = cvCreateImage(cvSize(width, height), 8, 1); 
    cvNamedWindow("Showing Video:", 0); 
    while (true) 
    { 
     frame = cvQueryFrame(video); 
     cvShowImage("Showing Video:", frame); 
     cvWaitKey(10); 
    } 
    //cvDestroyWindow("Showing Video:"); 
    //cvReleaseImage(&frame); 
} 
int main() 
{ 
    CvCapture *video = cvCaptureFromCAM(CV_CAP_ANY); 
    showVideo(video); 
    return 0; 
} 

我想有一個char ch;像這樣while(ch != 'q')東西然後它仍然播放視頻。有一些方法,如kbhit()getch(),但它們不是標準的,我想要的東西,只要按下'q'鍵,然後顯示視頻將完成,否則視頻顯示將仍在運行。

我該怎麼做這份工作?

回答

3

如果在分配的時間內未按下任何按鍵,或者按下了按鍵時的按鍵代碼,則cvWaitKey()返回0。將您的呼叫更改爲cvWaitKey()以測試返回值,如下所示:

chr = cvWaitKey(10); 
if (chr == 'q') 
    break; 
0

創建一個額外的線程,其中新的線程等待stdin數據。如果它接收到正確的內容,則設置另一個線程檢查的標誌。最明顯的手段來查看其是否

while (!done) 

更換

while (true) 

其中done被初始化爲假,並通過鍵盤線程設置爲true。