ord('q')和0xFF的用法

时间:2018-11-18 04:25:13

标签: python opencv

我无法理解以下代码段-

if cv2.waitKey(0) & 0xFF == ord('q'):
break

在此代码中-

    1 import numpy as np
    2 import cv2
    3 
    4 cap = cv2.VideoCapture(0)
    5 
    6 while(True):
    7     # Capture frame-by-frame
    8     ret, frame = cap.read()
    9 
   10     # Our operations on the frame come here
   11     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
   12 
   13     # Display the resulting frame
   14     cv2.imshow('frame',gray)
   15     if cv2.waitKey(1) & 0xFF == ord('q'):
   16         break
   17 
   18 # When everything done, release the capture
   19 cap.release()
   20 cv2.destroyAllWindows()

ord('q')和0xFF是什么意思?在这里如何使用?

3 个答案:

答案 0 :(得分:2)

  • ord('q')返回q的Unicode代码点
  • cv2.waitkey(1)返回与按下的键相对应的32位整数
  • & 0xFF是一个位掩码,可将剩余的24位设置为零,因为ord()返回一个介于0和255之间的值,因为您的键盘只有有限的字符集
  • 因此,一旦应用了遮罩,就可以检查它是否是对应的密钥。

答案 1 :(得分:1)

按照cv2.waitkey docs

  

它返回所按下键的代码;如果未按下任何键,则返回-1   在指定的时间过去之前。

通常在OpenCV教程和博客中,通常使用“ q”键来停止任何不确定的操作,例如从您的情况下捕获相机中的帧。在这种情况下,程序会在每次迭代时无限期地检查是否使用q语句按下了“ cv2.waitKey(1) & 0xFF == ord('q')”键。如果是True,那么它只会制动无限的while循环。您可以将其设置为您选择的任何键。

答案 2 :(得分:0)

首先,将执行cv2.waitKey(1) & 0xFF

  • 等待1 ms 以便用户按下。
  • 如果用户按下例如 q ,则{em.q 的waitKey返回DECIMAL VALUE为113。在二进制,表示为 0b01110001
  • 接下来,AND运算符被两个输入分别为 0b01110001 和0xFF( 0b11111111 )。

0b01110001 AND 0b11111111 = 0b01110001 。确切的结果是 q

DECIMAL VALUE

第二,将左表达式 0b01110001 的值与ord('q')进行比较。显然,这些值与另一个值相同。最后的结果是调用break