74 votes

Que fait la fonction cvWaitKey( ) d'OpenCV ?

Que se passe-t-il pendant l'exécution de cvWaitKey() ? Quels sont les cas d'utilisation typiques ? Je l'ai vu dans OpenCV mais la documentation n'est pas claire sur son objectif exact.

131voto

SuperElectric Points 2157

cvWaitKey(x) / cv::waitKey(x) fait deux choses :

  1. Il attend x millisecondes pour une pression de touche sur une fenêtre OpenCV (c'est-à-dire créée à partir de cv::imshow() ). Notez qu'elle n'écoute pas l'entrée de la console sur stdin. Si une touche a été pressée pendant ce temps, elle renvoie le code ASCII de la touche. Sinon, elle renvoie -1 . (Si x est égal à zéro, il attend indéfiniment la pression de la touche).
  2. Il gère tous les événements de fenêtrage, tels que la création de fenêtres à l'aide de la fonction cv::namedWindow() ou de montrer des images avec cv::imshow() .

Une erreur courante pour les débutants en opencv est d'appeler cv::imshow() en boucle à travers les images vidéo, sans suivre chaque tirage avec cv::waitKey(30) . Dans ce cas, rien n'apparaît à l'écran, parce que highgui n'a jamais le temps de traiter les demandes de tirage au sort provenant de cv::imshow() .

18voto

karlphillip Points 46502

Tout simplement, cvWaitKey() dort pour X milisecondes, en attendant qu'une touche soit pressée.

int cvWaitKey(int X);

Si une touche est pressée, cette fonction renvoie le code ASCII de la touche. Ou renvoie -1 si aucune touche n'a été pressée pendant ce temps.

11voto

cvWaitKey(0) arrête votre programme jusqu'à ce que vous appuyiez sur un bouton.

cvWaitKey(10) n'arrête pas votre programme mais réveille et alerte pour terminer votre programme lorsque vous appuyez sur un bouton. Il est utilisé dans les boucles car cvWaitkey n'arrête pas la boucle.

Utilisation normale

char k;

k=cvWaitKey(0);

if(k == 'ESC')

con k vous pouvez voir quelle touche a été pressée.

8voto

sixstring91 Points 142

. l'argument de 0 est interprété comme infinite

. pour faire glisser les fenêtres du highGUI, vous devez continuellement appeler la fonction cv::waitKey() par exemple pour les images statiques :

cv::imshow("winname", img);

while(cv::waitKey(1) != 27); // 27 = ascii value of ESC

8voto

Andy Points 51

Note à l'intention de tous ceux qui ont eu des problèmes avec l'application cvWaitKey( ) fonction. Si vous constatez que cvWaitKey(x) n'attend pas du tout, assurez-vous que vous avez effectivement une fenêtre ouverte (c'est-à-dire cvNamedWindow(...) ). Mettez le cvNamedWindow(...) déclaration AVANT toute cvWaitKey() appels de fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X