2012-09-17 19 views
19

thể trùng lặp:
OpenCV - cvWaitKey()waitKey (30) có nghĩa là gì trong OpenCV?

Tôi muốn lọc các khung hình video.

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

Ý nghĩa của waitKey(30) là gì? Bởi vì nếu tôi nhận xét ra dòng if(waitKey (30) >= 0) break;, mã trên không hoạt động!

+1

[Câu hỏi này] (http: //stackoverflow.com/questions/5217519/opencv-cvwaitkey) hỏi về 'waitkey', và tôi tin câu trả lời giải thích tại sao' imshow' của bạn không hoạt động. Trích dẫn câu trả lời, * Một sai lầm phổ biến cho người mới sử dụng opencv là gọi cv :: imshow() trong một vòng lặp thông qua các khung hình video, mà không theo dõi từng bản vẽ với cv :: waitKey (30). Trong trường hợp này, không có gì xuất hiện trên màn hình, vì highgui không bao giờ có thời gian để xử lý yêu cầu rút từ cv :: imshow(). * – chris

+0

Đúng vậy, tôi không sử dụng OPENCV nhiều – Imbarfar

+0

Đó là điều không bao giờ đối với tôi. – chris

Trả lời

19

Chức năng waitKey() chờ sự kiện quan trọng cho "chậm trễ" (ở đây, 30 mili giây). Như được giải thích trong các OpenCV documentation, HighGui (imshow() là một chức năng của HighGui) cần một cuộc gọi waitKey thường xuyên, để xử lý vòng lặp sự kiện của nó.

Ie, nếu bạn không gọi waitKey, HighGui không thể xử lý các cửa sổ các sự kiện như vẽ lại, thay đổi kích thước, sự kiện đầu vào vv Vì vậy, chỉ cần gọi nó, ngay cả với một sự chậm trễ 1ms :)

+0

Tôi hiểu rồi, Cảm ơn bạn đã trả lời nhanh. – Imbarfar

+0

thì nghĩa là cWaitkey() không có bất kỳ quan hệ nào để chụp ảnh sau 30 mili giây. Nó phải chờ và hiển thị hình ảnh trên cửa sổ hiển thị. – Abc