cv2.waitKey(1)和0xff == ord('q')如何工作?

时间:2019-08-28 11:00:11

标签: python python-3.x opencv-python

此行如何工作?

到目前为止,我对所有cv2.waitKey(number)的所有数字int的输出为-1,而0xff是一个等于{{1 }}以十进制数字表示。

255等于十进制数字-1 & 0xff

此外,255等于ord('q')

但是现在,我不知道为什么113

2 个答案:

答案 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()