Qu'est-ce que 0xFF dans cv2.waitKey (1)?
Je suis en train d'essayer de comprendre ce 0xFF n'sous le capot dans l'extrait de code suivant:
if cv2.waitKey(0) & 0xFF == ord('q'):
break
Des idées?
source d'informationauteur Dora
Vous devez vous connecter pour publier un commentaire.
0xFF
est une constante hexadécimale qui est11111111
en binaire. En utilisant bit à bit ET (&
) avec cette constante, il ne laisse que les 8 derniers bits de l'original (dans ce cas, quelle que soitcv2.waitKey(0)
est).Il est également important de noter que ord('q') peut retourner un nombre différent si vous avez NumLock activé (c'est peut-être aussi avec d'autres touches).
Par exemple, lorsque vous appuyez sur c, le code:
retourne
La conversion de ces 2 nombres binaires, nous pouvons voir:
Comme nous pouvons le voir, le dernier octet est identique. Ensuite, il est nécessaire de prendre juste ce dernier octet que le reste est causée en raison de l'état de la fonction de verrouillage numérique. Ainsi, nous effectuons:
et la valeur de la clé restera le même, et maintenant nous pouvons le comparer avec n'importe quelle touche, nous aimerions tels que votre question
cv2.waitKey() renvoie un entier de 32 Bits, la valeur (peut-être dépend de la plateforme). La clé d'entrée est en ASCII qui est un 8 Bits valeur de type entier. De sorte que vous ne se soucient que ces 8 bits et veulent tous les autres bits à 0. Ce que vous pouvez réaliser avec:
ord(c) retourne un entier représentant le point de code Unicode du caractère(c) lorsque l'argument est un objet unicode, ou de la valeur de l'octet lorsque l'argument est un 8-bit de la chaîne.
Dans le cas de systèmes 64 bits de la valeur de cv2.waitKey(0) est au niveau du bit(&) avec le 0xFF constante hexadécimale (qui est la représentation de chaîne binaire 11111111) que les résultats de la dernière de 8 bits. Donc de vérifier auprès du avec ord(c).
Sincèrement dans ce cas, vous n'avez pas besoin 0xFF. Si vous n'avez
cv2.waitkey(0) == ord(q)
il travail tout de même.0xFF
est juste utilisé pour masquer la dernière8bits
de la séquence et de l'ord() de n'importe quel clavier personnage ne sera pas supérieure à 255. Vous pouvez faire référence à ce Table ASCII pour trouver les valeurs numériques de tout caractère du clavier.