2012-05-17 32 views
1

我正在使用Qt編寫一個GUI程序,並使用OpenCV進行一些視頻處理。我在主GUI線程中的標籤中顯示OpenCV進程(它位於單獨的線程中)的結果。使用cv :: waitKey而不必先調用cv :: namedWindow或cv :: imshow

我遇到的問題是cv :: waitKey不起作用,除非我打開使用cv :: namedWindow或cv :: imshow打開的本機OpenCV窗口。有人知道如何解決這個問題嗎?

短例如:

void Thread::run() 
{ 
    //needed variables 
    cv::VideoCapture capture(0); 
    cv::Mat image; 

    //main loop 
    //cv::namedWindow("test"); 
    forever 
    { 
     capture>> image; 
     if(!image.data) 
      break; 
     emit paintToDisplay(convertToQImage(image)); 
     cv::waitKey(40); 
    } 
} 

隨着//cv::namedWindow("test");即評論的,該程序與訪問衝突錯誤崩潰。

cv::namedWindow("test");即未註釋,程序顯示完美,但有一個窗口(命名測試),我不想或不需要。任何人?

+0

重新讀你的問題,它沒有任何意義,**與** namedWindow()你有一個行爲,然後**與** namedWindow()你有另一個。 – karlphillip

+0

其中一個被評論,另一個不是 – Dyps

+0

@karlphillip我編輯過使它更清晰。 – Dyps

回答

1

我找到了一個解決方案中使用msleep()。它易於使用,因爲它是類QThread的成員。

只是以爲我會更新這個以防萬一有類似問題的人發現這個線程。

2

CV :: waitkey是OpenCV中的GUI環路櫥窗

的一部分,如果你只是想等待一個按鍵看到QWaitcondition

或者你可以在它沒有圖像,或者小1,1像素的圖像顯示另一個名爲窗口,只是忽略窗口

3

cv::waitKey()只OpenCV的窗口工作,這是你使用的是現在沒有什麼。

我建議你研究一個QT另類,最有可能qSleep(),這是由QTest模塊提供:

QTest::qSleep(40); 
+0

是的,我認爲'waitKey()'無法自行工作有點傻。我找到了解決方案:'msleep()'。它是QThread類的成員。 – Dyps