Solución:
También es importante tener en cuenta que ord (‘q’) puede devolver números diferentes si tiene NumLock activado (tal vez también esté sucediendo con otras teclas). Por ejemplo, al presionar c, el código:
key = cv2.waitKey(10)
print(key)
devoluciones
1048675 when NumLock is activated
99 otherwise
Convirtiendo estos 2 números a binarios podemos ver:
1048675 = 100000000000001100011
99 = 1100011
Como podemos ver, el último byte es idéntico. Entonces es necesario tomar solo este último byte ya que el resto se debe al estado de NumLock. Así, realizamos:
key = cv2.waitKey(33) & 0b11111111
# 0b11111111 is equivalent to 0xFF
y el valor de la clave seguirá siendo el mismo y ahora podemos compararlo con cualquier clave que nos gustaría, como su pregunta
if key == ord('q'):
0xFF
es una constante hexadecimal que es 11111111
en binario. Mediante el uso de bit a bit AND (&
) con esta constante, deja solo los últimos 8 bits del original (en este caso, lo que sea cv2.waitKey(0)
es).
cv2.waitKey () devuelve un valor entero de 32 bits (puede depender de la plataforma). La entrada clave está en ASCII, que es un valor entero de 8 bits. Por lo tanto, solo le importan estos 8 bits y desea que todos los demás bits sean 0. Esto puede lograrlo con:
cv2.waitKey(0) & 0xFF