2014-11-22 562 views
0

我想用OpenCV創建一個C++程序,這將允許我連續運行一個循環來詢問用戶如何處理圖像。例如,用戶可以輸入特定的數字來執行命令。我有作爲示例的代碼是:OpenCV imshow()在一個循環顯示圖像

int main() 
{ 
    int choose = -1; 


    for (;;) 
    { 

    cin >> choose; 

    if (choose == 0) 
    { 

     Mat img = imread(fileName1);//, CV_LOAD_IMAGE_GRAYSCALE); 

     if (!img.data) 
     { 
      cout << "Unable to load file." << endl; 
     } 
     else 
     { 
      namedWindow(fileName1, 1); 
      imshow(fileName1, img); 
     } 
    } 
    else if (choose == 1) 
    { 
     Mat img = imread(fileName2, CV_LOAD_IMAGE_GRAYSCALE); 

     if (!img.data) 
     { 
      cout << "Unable to load file." << endl; 
     } 
     else 
     { 
      namedWindow(fileName2, 1); 
      imshow(fileName2, img); 
     } 
    } 
} 


waitKey(0); 

return 0; 

} 

其中圖像是應該加載該窗口只是充滿灰色。當圖像不在循環中時,我無法加載圖像。任何人都可以幫助我弄清楚爲什麼這會導致問題嗎?

編輯:當然,忘記了waitKey(0),雖然即使我確實有這種情況,當我回到開始的循環輸入一個數字時,由於某種原因,打開的窗口崩潰。

+0

你需要一個waitKey();在imshow()之後(典型的noob陷阱) – berak 2014-11-22 11:36:32

+0

我不確定,但我認爲你的waitKey不是在for循環中,而你必須有另一個值,如0 – Engine 2014-11-22 11:39:09

+1

'waitKey()'必須遵循'imshow ()'。 – 2014-11-22 14:20:41

回答

2

使用waitKey獲取按下的鍵而不是cin。或者如評論中所述,在imshow之後做一個waitKey(1)