繁体   English   中英

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

[英]How cv2.waitKey(1) & 0xff == ord('q') works?

这条线是如何工作的?

到目前为止,我知道所有所有int数的cv2.waitKey(number)的输出都是-1 ,而0xff是一个十六进制数,等于十进制255

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

而且, ord('q')等于113

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

cv2.waitKey(1)返回当前按下的键的字符代码,如果未按下任何键,则返回-1。 & 0xFF是二进制AND操作,以确保仅保留键的单字节(ASCII)表示,对于某些操作系统, cv2.waitKey(1)将返回不是单字节的代码。 ord('q')始终返回ord('q')的ASCII表示形式,为113(十六进制为0x71)。

因此,如果在评估cv2.waitKey(1)时用户按下q键,将确定以下内容:

cv2.waitKey(1) & 0xFF == cv2.ord('q')
0xXX71 & 0xFF == 0x71
0x71 == 0x71
True

我刚刚完成了一些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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM