在執行cvWaitKey()
期間會發生什麼?什麼是典型的用例?我在OpenCV參考中看到它,但其文檔的確切目的不明確。OpenCV的cvWaitKey()函數是做什麼的?
回答
cvWaitKey(0)
停止您的程序,直到您按下按鈕。
cvWaitKey(10)
不會停止您的程序,但會在您按下按鈕時喚醒並提醒您結束程序。它用於循環,因爲cvWaitkey
不停止循環。
正常使用
char k;
k=cvWaitKey(0);
if(k == 'ESC')
與k
你可以看到按下了哪個鍵。
還有一點更重要 - 它是openCV消息循環。除非您在我的循環 – 2011-03-07 15:05:38
-1中調用cvWaitKey()進行比較,否則不會在cvNamedWindow中看到任何新數據** char?= multichar **。這是錯誤的。使用可打印的字符(在這種情況下是不可能的,因爲ESC是不可打印的字符,但在例如使用Q鍵的情況下,您可以執行?='q'比較)或選擇其中一個數字表示。 ASCII支持多種數字系統:十六進制(0x1b),十進制(27)和八進制(033)。所有列出的代表ESC鍵。 – rbaleksandar 2015-08-14 12:46:35
/* Assuming this is a while loop -> e.g. video stream where img is obtained from say web camera.*/
cvShowImage("Window",img);
/* A small interval of 10 milliseconds. This may be necessary to display the image correctly */
cvWaitKey(10);
/* to wait until user feeds keyboard input replace with cvWaitKey(0); */
平原簡單,被按下cvWaitKey()
休眠X毫秒,等待任何鍵。
int cvWaitKey(int X);
如果按下某個鍵,此函數將返回鍵的ASCII碼。如果在此期間沒有按鍵,則返回-1。
這並不是完整的故事。實際上,即使你不關心鍵盤輸入,調用這個函數對於一些OpenCV應用程序來說也是必不可少的。這裏有一些[更多信息](http://opencv.willowgarage.com/wiki/documentation/c/highgui/WaitKey)。 – 2013-01-27 23:15:59
cvWaitKey(x)/cv::waitKey(x)
做兩兩件事:
- 它等待X毫秒一個的OpenCV窗口上的鍵按壓(即,從
cv::imshow()
創建)。請注意,它不會監聽控制檯輸入的標準輸入。如果在此期間按下了某個鍵,它將返回該鍵的ASCII碼。否則,它將返回-1
。 (如果X是零,它無限期地等待鍵按下。) - 它處理任何窗口的事件,諸如與
cv::namedWindow()
創建窗口,或顯示用cv::imshow()
圖像。
opencv新手常見的錯誤是通過視頻幀在循環中調用cv::imshow()
,而不跟隨每個繪製與cv::waitKey(30)
。在這種情況下,屏幕上不會顯示任何內容,因爲highgui從來沒有時間處理來自cv::imshow()
的繪製請求。
1+爲一個簡單和完整的答案。 – qwerty9967 2013-04-01 15:08:35
cvWaitKey
只是提供了一些延遲。例如:
char c = cvWaitKey(33);
if(c == 27) break;
這是我的代碼,其中一個視頻加載到openCV和輸出的幀的代碼。代碼中的33
數字表示在33ms
之後,將顯示一個新幀。因此,屏幕上顯示的是每幀之間的暗號或時間間隔33ms
。 希望這有助於。
cvWaitKey(milliseconds)
只需等待毫秒提供作爲鍵盤的下一個鍵擊的參數。
人類的眼睛無法看到物體在小於1/10秒內移動,所以我們用它在屏幕上保留了相同的圖像幀一段時間。一旦鍵盤按鍵被按下,下一個操作將被執行。
總之cvWaitKey(milliseconds)
等待按鍵或millisecond
提供的時間。
「人類的眼睛無法看到物體在1/10秒內移動,所以我們用它在屏幕上保持一段時間,只要鍵盤按鍵被按下,下一個操作就會執行」這個問題真的很重要嗎? – quantum 2012-10-20 01:40:40
請注意任何可能與cvWaitKey()
函數有問題的人。如果您發現cvWaitKey(x)
沒有在等待,請確保您確實有一個窗口打開(即cvNamedWindow(...)
)。在進行任何cvWaitKey()
函數調用之前,請先聲明cvNamedWindow(...)
。
歡迎來到SO,它是發佈信息的好地方,就像你一樣。通常,當您發佈答案時,它必須爲問題帶來新信息,因此它不會創建冗餘帖子。這是你的文章的情況。如果您的評論較小,您可以稍後對該問題發表評論(當您獲得更多的廣告時)。如果你還沒有閱讀它,我建議你看看FAQ:http://stackoverflow.com/faq。問候 – ForceMagic 2012-10-11 06:02:21
。參數0
被解釋爲infinite
。爲了拖動highGUI窗口,您需要不斷調用cv::waitKey()
函數。例如,對於靜態圖像:
cv::imshow("winname", img);
while(cv::waitKey(1) != 27); // 27 = ascii value of ESC
等待毫秒檢查鍵被按下,如果被按壓在間隔返回字符的ASCII值,否則它仍然-1
- 1. OpenCV的cvAcc()是做什麼的?
- 2. 那麼函數SDL_FreeSurface是做什麼的?
- 3. MATLAB的bitxor函數是做什麼的?
- 4. peer_connection.onicecandidate()函數做什麼?什麼是ice_event?
- 5. Wordpress「_e()」函數是做什麼的?
- 6. 這裏做的it()函數是什麼?
- 7. OpenCV drawMatches什麼也不做
- 8. opencv - resizeWindow什麼都不做?
- 9. 這個函數做什麼?什麼是奇怪的語法?
- 10. jQuery(函數)或$(函數)是做什麼的?
- 11. 什麼是showErros函數做jQuery驗證
- 12. 什麼是延遲()函數做
- 13. 爲什麼cvWaitKey(0)不起作用?
- 14. MySQL的Decimal函數的第一個參數是做什麼的?
- 15. Wince - CreateProcess函數做什麼
- 16. 這個函數做什麼?
- 17. PHP函數@ $ _做什麼?
- 18. 「排序」函數的「鍵」參數是做什麼的?
- 19. 什麼是OpenCV C++中的createBackgroundSubtractorKNN參數?
- 20. 什麼是OpenCV中的UndistortRectifyMap()m1type參數
- 21. OpenCV中cvGetRows()函數的用法是什麼?
- 22. a是一個函數,那麼`a.call.call`真的做了什麼?
- 23. 做默認析構函數做什麼?
- 24. MATLAB的ga函數中的括號是做什麼的?
- 25. ob_start和ob_gzhandler函數真的做什麼
- 26. python lxml庫的etree.xpath函數做什麼?
- 27. jquery的scrollLeft函數做什麼
- 28. 什麼是打開:函數在JavaScript中做什麼?
- 29. 在C++中,2D數組的增量是什麼?函數聲明(0)做什麼?
- 30. 這實際上是做什麼的? - 瘋狂的C++函數
什麼別你是否瞭解它,或者你認爲它有什麼作用? OpenCV文檔參考對我來說似乎非常清楚... – 2011-03-07 08:44:47
@ user588855對於我們所有人來說,重新審視您的問題並接受一些答案(包括這一點)是很重要的。 – karlphillip 2011-03-31 22:38:08
對於記錄,'cvWaitKey()'現在是一個棄用的C函數。 'waitKey()'是現代C++的等價物。 – StockB 2015-01-24 19:31:39