opencv cv2.waitKey(1)& 0xff == ord('q')是如何工作的?

mkh04yzy  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(179)

这条线是如何工作的?
到目前为止,cv2.waitKey(number)对所有int数的输出是-10xff是一个十六进制数,等于十进制数中的255
-1 & 0xff等于255的十进制数。
ord('q')等于113
但现在,我不知道为什么255 == 113

yzxexxkh

yzxexxkh1#

cv2.waitKey(1)返回当前按下的键的字符代码,如果未按下任何键,则返回-1。& 0xFF是二进制AND操作,以确保仅保留键的单字节(ASCII)表示,因为对于某些操作系统,cv2.waitKey(1)将返回不是单字节的代码。ord('q')始终返回“q”的ASCII表示,即113(十六进制为0x 71)。
因此,如果当cv2.waitKey(1)被评估时用户按下Q键,则将确定以下内容:

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

d7v8vwbk2#

我刚刚完成了一些OpenCV代码,cv2.waitKey(1)& 0xff == ord('q') 是我玩过多次的代码之一。

首先:

cv2.waitKey([delay])
函数waitKey无限等待按键事件,延迟以毫秒为单位。waitKey(0)表示永远。

第二次:

  • ord()* 方法返回一个整数,表示给定Unicode字符的Unicode码位。在您的代码中,您希望用户选择字母'q',该字母将转换为Unicode值'113'。
    第三:
  • 0xFF* 是一个十六进制常量,在二进制中为1111111。它用于屏蔽序列的最后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()
9gm1akwq

9gm1akwq3#

解决方案是使用waitkey(0)而不是waitkey(1)

from cv2 import waitkey
if waitKey(0) & 0xFF == ord("q"):
    break

相关问题