• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    OpenCV:waitKey函數

    緒:

    waitKey()函數在顯示圖像時具有延時的感化;

    是OpenCV中的一個根基函數;

    本文本家兒要介紹waitKey函數的格局,功能,以及waitKey窗口機制和waitKey的應用;

    東西/原料

    • OpenCV 2410

    方式/步調

    1. 1

      waitKey格局:

      int waitKey(int delay=0)

      delay-延時的時候,單元ms;

    2. 2

      waitKey函數的功能:

      ①期待x ms,若是在此時代有按鍵按下,則當即竣事并返回按鍵的ASCII碼,不然返回-1;

      ②若是x=0,則無限期待下去,直到有按鍵按下;

      【注】:在imshow之后,若是沒有waitKey語句則不會顯示圖像。

    3. 3

      waitKey函數的窗口機制:

      waitKey的延時功能本家兒要針對圖像窗口機制的;

      沒有窗口,則waitKey號令不執行;

      純粹的延時用sleep號令;

      void update(void *param) 

          VideoCapture cap; 

          cap.open("test.avi"); 

          if ( !cap.isOpened() ) 

          { 

              return ; 

          } 

       

          for(;;) 

          { 

              cap>>frame; 

              //cvNamedWindow("tmp");//加上這個,再利用waitkey就沒問題了 

              //waitKey(100);//利用waitkey法式必心猿意馬崩,本家兒如果因為waitkey是對窗口機制起感化的,即namedWindow發生的窗口,若沒有發生的窗口,則waitkey半斤八兩于未執行,當視頻幀很快的被讀完,frame為空,天然就出問題了 

       

              Sleep(100);//若利用Sleep,則能正常工作 

          }    

       

      void main() 

          _beginthread(update,0,NULL); 

          Sleep(1000); 

          cvNamedWindow("test"); 

       

          for(;;) 

          { 

              //判空(省略)         

              imshow("test",*frame); 

              waitKey(100); 

          } 

          waitKey(0); 

      }  

    4. 4

      應用:

      #include < opencv2/highgui/highgui.hpp >

      #include < iostream >

      #include < Windows.h >

       

      using namespace cv;

      using namespace std;

       

      int main()

      {

             Mat im;

             double duration;

             im = imread("lena.jpg",0);

       

             // 測試沒有namedWindow時的waitKey執行時候

             duration = static_cast<double>(getTickCount());

             waitKey(10000);

             duration = static_cast<double>(getTickCount()) - duration;

             duration /= getTickFrequency();

             cout <<"第一個waitKey運行時候為:" << duration << 's' << endl;

       

             namedWindow("lena");

             imshow("lena",im);

       

             // 測試有namedWindow時的waitKey執行時候

             duration = static_cast<double>(getTickCount());

             waitKey(10000);

             duration = static_cast<double>(getTickCount()) - duration;

             duration /= getTickFrequency();

             cout <<"第二個waitKey運行時候為:" << duration << 's' << endl;

       

             Sleep(20000);

             return 0;

      }

      從執行成果看出,第一個成果并未如期執行,第二個成果如期執行了。這是因為waitKey僅對窗口機制起感化,即namedWindow發生的窗口。若在此之前沒有發生窗口,則waitKey半斤八兩于未執行。

    5. 5

      注重事項:

      ①waitKey()--這個函數是在一個給心猿意馬的時候內(單元ms)期待用戶按鍵觸發;若是用戶沒有按下 鍵,則接續期待(輪回)

      ②while(1){ if(waitKey(100)==27)break; } 在這個法式中,我們告訴OpenCv期待用戶觸發事務,期待時候為100ms,若是在這個時候段內, 用戶按下ESC(ASCII碼為27),則跳出輪回,不然,則跳出輪回

      ③若是設置waitKey(0),則暗示法式會無限制的期待用戶的按鍵事務

    注重事項

    • waitKey功能: 期待x ms,若是在此時代有按鍵按下,則當即竣事并返回按鍵的ASCII碼;
    • waitKey的延時功能本家兒要針對圖像窗口機制的;
    • 發表于 2018-04-13 00:00
    • 閱讀 ( 1031 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆