【问题标题】:How cv2.waitKey(1) & 0xff == ord('q') works?cv2.waitKey(1) & 0xff == ord('q') 如何工作?
【发布时间】:2023-03-12 04:14:01
【问题描述】:

这条线是如何工作的?

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

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

另外,ord('q') 等于 113

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

【问题讨论】:

  • & 不是逻辑“AND”运算符,而是通常用于屏蔽事物的位运算。这意味着获取waitKey()调用的前8位并将它们与ord("q")的位进行比较
  • 你解决过这个问题吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    第一:

    cv2.waitKey([延迟])

    函数waitKey无限等待按键事件,延迟以毫秒为单位。 waitKey(0) 意味着永远。

    第二:

    ord() 方法返回一个整数,表示给定 Unicode 字符的 Unicode 代码点。在您的代码中,您希望用户选择转换为 Unicode 值“113”的字母“q”。

    第三:

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

    【讨论】:

      猜你喜欢
      • 2018-11-13
      • 2016-05-24
      • 2019-04-20
      • 2022-07-01
      • 2016-06-12
      • 2021-07-25
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多