2014-02-16 222 views
0

我正在用C++編寫一個實時視頻處理程序,並希望能夠使用相同的mjpeg流切換三個窗口,顏色,灰度和單色。我已經運行了所有圖像Feed,但由於我的屏幕很小,我希望能夠單獨打開和關閉它們。爲此,我編寫了下面的代碼,但調用了destroyWindow(「[windowname]」);相反,停止整個程序。我已經閱讀過這些文檔,並且在它前面添加void也沒有幫助。有人可以告訴我我做錯了什麼嗎? 下面的代碼(它是一個無限循環,直到你看到下面的破被稱爲):destroyWindow(來自opencv)關閉所有窗口並停止C++程序


imshow("Color", imageColor); 
    imshow("Monochrome", imageMonochrome); 
    imshow("Grayscale", imageGrayscale); 

    int keyPressed = waitKey(0); 
    if (keyPressed > 0) 
    { 
     cout << keyPressed; 
     cout << "key was pressed\n"; 
     // Press C to toggle color window 
     if (99 == keyPressed) 
     { 
      if (colorOpen) 
      { 
       cout << "Color window closed\n"; 
       void destroyWindow("Color"); 
       colorOpen = false; 
      } 
      if (!colorOpen) 
      { 
       cout << "Color window opened\n"; 
       imshow("Color", imageColor); 
       colorOpen = true; 
      } 
     } 

     // Press M to toggle monochrome window 
     if (109 == keyPressed) 
     { 
      if (monochromeOpen) 
      { 
       cout << "Monochrome window closed\n"; 
       void destroyWindow("Monochrome"); 
       monochromeOpen = false; 
      } 
      if (!monochromeOpen) 
      { 
       cout << "Monochrome window opened\n"; 
       imshow("Monochrome", imagebw); 
       monochromeOpen = true; 
      } 
     } 

     // Press G to toggle grayscale window 
     if (103 == keyPressed) 
     { 
      if (grayscaleOpen) 
      { 
       cout << "Grayscale window closed\n"; 
       void destroyWindow("Grayscale"); 
       grayscaleOpen = false; 
      } 
      if (!grayscaleOpen) 
      { 
       cout << "Grayscale window opened\n"; 
       imshow("Grayscale", image); 
       grayscaleOpen = true; 
      } 
     } 
     // Break out of infinite loop when [ESC] is pressed: 
     if (27 == keyPressed) 
     { 
      cout << "Escape Pressed\n"; 
      break; 
     } 
    } 
+1

「*我已經閱讀過文檔,把void放在它前面並沒有幫助。*」這聽起來像你不明白你讀的是什麼。是什麼讓你認爲一個「空白」會有什麼作用?沒有它,你認爲會發生什麼? –

回答

1

你叫destroyWindow後粘貼終止代碼(通過運行關結束main)。如果這不是你想要發生的事情,那麼在調用destroyWindow之後編寫代碼來做其他事情。也許你想要一個循環?

+0

@Schwartz說你可能需要一個循環。這可能有助於:'while(keyPressed> 0){// blabla; keyPressed = waitKey(0); }」 –

相關問題