¿Qué ocurre durante la ejecución de cvWaitKey()
? ¿Cuáles son algunos casos de uso típicos? Lo vi en OpenCV referencia, pero la documentación no está clara en su propósito exacto.¿Qué hace la función cvWaitKey() de OpenCV?
Respuesta
cvWaitKey(0)
detiene su programa hasta que presione un botón.
cvWaitKey(10)
no detiene su programa, pero se despierta y alerta para finalizar su programa cuando presiona un botón. Se usa en bucles porque cvWaitkey
no detiene el bucle.
El uso normal
char k;
k=cvWaitKey(0);
if(k == 'ESC')
con k
se puede ver lo que se ha pulsado la tecla.
También algo más importante: es el ciclo de mensajes de openCV. No verá ningún dato nuevo en cvNamedWindow a menos que llame a cvWaitKey() en el bucle –
-1 de mi parte para hacer una comparación ** char? = Multichar **. Esto es simplemente incorrecto Use el carácter imprimible (que en este caso no es posible ya que ESC es un carácter no imprimible, pero en el caso de usar la tecla Q puede hacer una comparación? = 'Q') o elija una de las representaciones numéricas. El ASCII admite varios sistemas numéricos: hexadecimal (0x1b), decimal (27) y octal (033). Todos los listados representan la tecla ESC. – rbaleksandar
/* 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); */
Llanura simplemente, cvWaitKey()
duerme durante X milisegundos, a la espera de cualquier tecla que se presione.
int cvWaitKey(int X);
Si se presiona una tecla, esta función devuelve el código de clave ASCII. O devuelve -1 si no se presionó ninguna tecla durante ese tiempo.
Esa no es toda la historia. En la práctica, incluso si no le importa la entrada del teclado, llamar a esta función puede ser esencial para algunas aplicaciones OpenCV. Hay algo de [más información aquí] (http://opencv.willowgarage.com/wiki/documentation/c/highgui/WaitKey). –
cvWaitKey(x)/cv::waitKey(x)
hace dos cosas:
- espera a x milisegundos para una pulsación de tecla en una ventana OpenCV (es decir, creado a partir de
cv::imshow()
). Tenga en cuenta que no escucha en stdin para la entrada de la consola. Si se presionó una tecla durante ese tiempo, devuelve el código ASCII de la clave. De lo contrario, devuelve-1
. (Si x es cero, se espera indefinidamente para la pulsación de tecla.) - Maneja los eventos de ventanas, como crear ventanas con
cv::namedWindow()
, o mostrar imágenes concv::imshow()
.
Un error común para los recién llegados OpenCV es llamar cv::imshow()
en un bucle a través de fotogramas de vídeo, sin el seguimiento de cada sorteo con cv::waitKey(30)
. En este caso, no aparece nada en la pantalla, ya que highgui nunca tiene tiempo para procesar las solicitudes de sorteo de cv::imshow()
.
1+ para una respuesta simple y completa. – qwerty9967
El cvWaitKey
simplemente proporciona algo de retraso. Por ejemplo:
char c = cvWaitKey(33);
if(c == 27) break;
Este código era parte de mi código en el que se cargaba un video en openCV y se generaban los marcos. El número 33
en el código significa que después de 33ms
, se mostraría un nuevo marco. Por lo tanto, fue un intervalo de tiempo o deli de 33ms
entre cada cuadro que se muestra en la pantalla. Espero que esto ayude.
cvWaitKey(milliseconds)
simplemente espere los milisegundos proporcionados como un parámetro para una próxima pulsación de tecla del teclado.
Ojos humanos que no pueden ver la cosa en movimiento en menos de 1/10 de segundo, por lo que usamos esto para mantener el mismo cuadro de imagen durante un tiempo en la pantalla. Tan pronto como se presiona la tecla del teclado, se realizará la siguiente operación.
En pocas palabras cvWaitKey(milliseconds)
espere para presionar la tecla o millisecond
tiempo proporcionado.
"Los ojos humanos no pueden ver la cosa moviéndose en menos de 1/10 de segundo, así que usamos esto para mantener el mismo cuadro de imagen durante un tiempo en la pantalla. Tan pronto como se presione la tecla del teclado, se realizará la siguiente operación" ¿Esto realmente importa a la pregunta? – quantum
Nota para cualquier persona que pueda haber tenido problemas con la función cvWaitKey()
. Si descubre que cvWaitKey(x)
no está esperando, asegúrese de que realmente tiene una ventana abierta (es decir, cvNamedWindow(...)
). Ponga la declaración cvNamedWindow(...)
ANTES de cualquier llamada a la función cvWaitKey()
.
Bienvenido en SO, es un buen lugar para publicar información como lo hizo. Por lo general, cuando publica una respuesta debe traer nueva información a la pregunta, por lo que no crea una publicación redundante. Cual fue el caso para tu publicación. Si tiene un comentario más pequeño, también podría comentar la pregunta más adelante (cuando obtenga más Rep). Si aún no lo ha leído, le sugiero que consulte las preguntas frecuentes: http://stackoverflow.com/faq. Saludos – ForceMagic
. argumento de 0
se interpreta como infinite
. Para arrastrar las ventanas highGUI, debe llamar continuamente a la función cv::waitKey()
. por ejemplo, para imágenes estáticas:
cv::imshow("winname", img);
while(cv::waitKey(1) != 27); // 27 = ascii value of ESC
esperas milisegundos para comprobar si se pulsa la tecla, si se presiona en ese intervalo devolver su valor ASCII, de lo contrario, aún -1
- 1. ¿Qué hace la función invisible()?
- 2. ¿Qué hace esta función?
- 3. ¿Qué hace la función de php 'sobrecarga'?
- 4. ¿Qué hace la función "_e()" de Wordpress?
- 5. ¿Qué hace la función j en Rails?
- 6. ¿Qué hace la función _ ($ string) en PHP?
- 7. ¿Qué hace la siguiente función get (1)?
- 8. ¿Qué función jQuery data() hace
- 9. ¿Qué significa waitKey (30) en OpenCV?
- 10. ¿Qué hace la función de subrayado de PHP?
- 11. ¿Qué hace exactamente la función gc_enable de PHP?
- 12. ¿Qué hace Contras en esta función?
- 13. Ubicación getAccuracy() ¿qué hace esta función?
- 14. ¿Qué hace esto realmente? - Crazy C++ función
- 15. Usando la función drawContours OpenCV en Python
- 16. La función OpenCV SURF no está implementada
- 17. ¿Qué hace la función "eventloop" en Scala Actors?
- 18. Hace referencia a la función de constructor
- 19. ¿Qué hace esta función de respuesta de JavaScript?
- 20. Función de clúster de OpenCV cvKMeans2(): ¿qué tipo de centro de clúster hay en la matriz?
- 21. ¿Qué hace la evaluación de Python()?
- 22. ¿Qué hace un buen nombre para una función de ayuda?
- 23. Función OpenCV similar al "find" de matlab
- 24. ¿Qué hace "devolver esto" dentro de una función javascript?
- 25. Ayuda con el uso de la función dilatar OpenCV
- 26. Determine qué versión de OpenCV
- 27. ¿Qué hace _locking() realmente?
- 28. ¿Qué hace postInvalidate()?
- 29. ¿Qué hace la bandera permisiva?
- 30. ¿Qué hace la copia hg?
lo que don' ¿Lo entiendes o qué crees que hace? La referencia de la documentación de OpenCV me parece muy clara ... –
@ user588855 Es importante para todos nosotros que revise sus preguntas y acepte algunas respuestas, incluido esto. – karlphillip
Para el registro, 'cvWaitKey()' ahora es una función C en desuso. 'waitKey()' es el equivalente moderno de C++. – StockB