我无法理解以下代码段-
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是什么意思?在这里如何使用?
答案 0 :(得分:2)
ord('q')
返回q的Unicode代码点cv2.waitkey(1)
返回与按下的键相对应的32位整数& 0xFF
是一个位掩码,可将剩余的24位设置为零,因为ord()
返回一个介于0和255之间的值,因为您的键盘只有有限的字符集答案 1 :(得分:1)
它返回所按下键的代码;如果未按下任何键,则返回-1 在指定的时间过去之前。
通常在OpenCV教程和博客中,通常使用“ q
”键来停止任何不确定的操作,例如从您的情况下捕获相机中的帧。在这种情况下,程序会在每次迭代时无限期地检查是否使用q
语句按下了“ cv2.waitKey(1) & 0xFF == ord('q')
”键。如果是True
,那么它只会制动无限的while
循环。您可以将其设置为您选择的任何键。
答案 2 :(得分:0)
首先,将执行cv2.waitKey(1) & 0xFF
。
waitKey
返回DECIMAL VALUE
为113。在二进制,表示为 0b01110001 。AND
运算符被两个输入分别为 0b01110001 和0xFF( 0b11111111 )。 0b01110001 AND
0b11111111 = 0b01110001 。确切的结果是 q
DECIMAL VALUE
第二,将左表达式 0b01110001 的值与ord('q')
进行比较。显然,这些值与另一个值相同。最后的结果是调用break
。