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

Iro*_*ron 0 python opencv

我无法理解以下代码段-

if cv2.waitKey(0) & 0xFF == ord('q'):
break
Run Code Online (Sandbox Code Playgroud)

在此代码中-

    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()
Run Code Online (Sandbox Code Playgroud)

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

The*_*ple 7

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


gia*_*huy 6

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

  • 等待 1毫秒等待用户按下。
  • 例如,如果用户按下q ,则qwaitKey返回值为 113。在二进制中,表示为0b01110001DECIMAL VALUE
  • 接下来,AND使用两个输入0b01110001和 0xFF ( 0b11111111 ) 执行运算符。

0b01110001 AND 0b11111111 = 0b01110001。确切的结果DECIMAL VALUEq

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