此行如何工作?
到目前为止,我对所有cv2.waitKey(number)
的所有数字int
的输出为-1
,而0xff
是一个等于{{1 }}以十进制数字表示。
255
等于十进制数字-1 & 0xff
。
此外,255
等于ord('q')
。
但是现在,我不知道为什么113
?
答案 0 :(得分:0)
cv2.waitKey(1)
返回当前按下的键的字符代码,如果未按下任何键,则返回-1。
& 0xFF
是二进制AND操作,以确保仅保留键的单字节(ASCII)表示,对于某些操作系统,cv2.waitKey(1)
会返回非单个字节的代码。 ord('q')
总是返回'q'的ASCII表示形式,为113(十六进制为0x71)。
因此,如果在评估cv2.waitKey(1)
时用户按下q键,将确定以下内容:
cv2.waitKey(1) & 0xFF == cv2.ord('q')
0xXX71 & 0xFF == 0x71
0x71 == 0x71
True
答案 1 :(得分:0)
我刚刚完成了一些OpenCV代码,并且 cv2.waitKey(1)和0xff == ord('q')是我多次玩弄的作品之一。
第一
cv2.waitKey([delay])
函数waitKey无限等待键事件,并且延迟以毫秒为单位。 waitKey(0)表示永远。
第二:
ord()方法返回一个整数,该整数表示给定Unicode字符的Unicode代码点。在您的代码中,您希望用户选择字母“ q”,该字母被转换为Unicode值“ 113”。
第三:
0xFF 是一个十六进制常数,二进制值为11111111。它用来 屏蔽掉序列的最后8位,任何键盘字符的 ord()都不得大于255。
这是我正在使用的代码,它不使用 ord()或&0xff 。
def display_facial_prediction_results(image):
# Display image with bounding rectangles
# and title in a window. The window
# automatically fits to the image size.
cv2.imshow('Facial Prediction', image)
while (True):
# Displays the window infinitely
key = cv2.waitKey(0)
# Shuts down the display window and terminates
# the Python process when a specific key is
# pressed on the window.
# 27 is the esc key
# 113 is the letter 'q'
if key == 27 or key == 113:
break
cv2.destroyAllWindows()