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.
Réponses
Trop de publicités?cvWaitKey(x) / cv::waitKey(x)
fait deux choses :
- 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). - 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 aveccv::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()
.
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.
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.