2012-09-17 51 views
19

可能重複:
OpenCV - cvWaitKey()waitKey(30)在OpenCV中意味着什麼?

我要過濾的視頻幀。

for(;;) 
{ 
cap.read(frame); 
medianBlur(frame,framedst,5); 
imshow("frame",frame); 
imshow("framedst",framedst);  
if(waitKey (30) >= 0) break; 
} 

waitKey(30)是什麼意思?因爲如果我註釋掉if(waitKey (30) >= 0) break;這一行,上面的代碼不起作用!

+1

[這個問題](HTTP: //stackoverflow.com/questions/5217519/opencv-cvwaitkey)詢問'waitkey',我相信這個答案解釋了爲什麼你的'imshow'不工作。引用答案,* opencv新手常犯的錯誤是通過視頻幀在循環中調用cv :: imshow(),而無需使用cv :: waitKey(30)跟蹤每次繪製。在這種情況下,屏幕上沒有任何內容出現,因爲highgui從來沒有時間處理來自cv :: imshow()的繪製請求。* – chris

+0

沒錯,我不使用OPENCV很多 – Imbarfar

+0

對我來說這絕對不是。 – chris

回答

19

函數waitKey()等待「延遲」(此處爲30毫秒)的按鍵事件。正如在OpenCV documentation中所解釋的那樣,HighGui(imshow()是HighGui的函數)需要定期調用waitKey,以便處理其事件循環。

也就是說,如果你不叫waitKey,HighGui不能處理窗口事件,如重繪,調整大小,輸入事件等,所以就叫它,即使有1ms的延遲:)

+0

我明白了,感謝您的快速回答。 – Imbarfar

+0

那麼這意味着cWaitkey()在30毫秒後與捕獲圖像沒有任何關係。它必須等待並在顯示窗口上顯示圖像。 – Abc