2012-09-17 11 views
19

Duplicar posible:
OpenCV - cvWaitKey()¿Qué significa waitKey (30) en OpenCV?

Quiero filtrado del fotograma de vídeo.

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

¿Qué significa la waitKey(30)? Porque si comento la línea if(waitKey (30) >= 0) break;, ¡el código anterior no funciona!

+1

[Esta pregunta] (http: //stackoverflow.com/questions/5217519/opencv-cvwaitkey) pregunta sobre 'waitkey', y creo que la respuesta explica por qué su' imshow' no funciona. Citando la respuesta, * Un error común para los principiantes de opencv es llamar a cv :: imshow() en un bucle a través de los marcos de video, sin seguir cada dibujo con cv :: waitKey (30). En este caso, no aparece nada en la pantalla, porque highgui nunca tiene tiempo para procesar las solicitudes de dibujo de cv :: imshow(). * – chris

+0

Así es, no uso OPENCV mucho – Imbarfar

+0

Nunca es para mí. – chris

Respuesta

19

La función waitKey() espera el evento clave para un "retraso" (aquí, 30 milisegundos). Como se explica en el OpenCV documentation, HighGui (imshow() es una función de HighGui) necesita una llamada de waitKey regularmente, para procesar su bucle de evento.

Es decir, si usted no llama WAITKEY, HighGui no puede procesar los eventos de Windows como redibujado, cambio de tamaño, evento de entrada, etc. Así que llamarlo, incluso con un retardo de 1 ms :)

+0

Lo tengo, gracias por la respuesta rápida. – Imbarfar

+0

que significa que cWaitkey() no tiene ninguna relación con la imagen de captura después de 30 milisegundos. Tiene que esperar y mostrar la imagen en la ventana de visualización. – Abc