cv2.waitKey

about

本文参考了:

  • OpenCV官方文档

  • Addmana同学的 关于为什么要用 if cv2.waitKey(1) & 0xFF == ord('q'): break的解释

cv2.waitKey接口

Python: cv2.waitKey([delay]) → retval
Parameters: 
delay – Delay in milliseconds. 0 is the special value that means “forever”.
The function waitKey waits for a key event infinitely (when delay <= 0 ) or for delay milliseconds, when it is positive. 
It returns the code of the pressed key or -1 if no key was pressed before the specified time had elapsed.
Note! The function only works if there is at least one HighGUI window created and the window is active. If there are several HighGUI windows, any of them can be active.

test

  • code 1
import cv2

def test():
    lena = cv2.imread('lena.jpg')
    cv2.imshow('image', lena)
    cv2.waitKey(0)
    print "I'm done"

if __name__ == '__main__':
    test()

图片显示着,直到你按下任意一个键,才被关掉,打印出I'm done

  • code 2
import cv2

def test():
    lena = cv2.imread('lena.jpg')
    cv2.imshow('image', lena)
    keycode = cv2.waitKey(1000)
    print keycode
    print "I'm done"

if __name__ == '__main__':
    test()

结果图片只显示1秒,如果此期间你按下一个键,比如键a,那么将打印出

97
I'm done

如果在图片显示时,不按键,则将打印出

-1
I'm done
  • code 3
import cv2

def test():
    lena = cv2.imread('lena.jpg')
    while True:
        cv2.imshow('image', lena)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            print "I'm done"
            break;

if __name__ == '__main__':
    test()

运行代码,会显示一张图片,当你按下q键时,显示图片的窗口被关掉,并打印出I'm done,结束程序。

关于为什么要有0xFF:

On some systems, waitKey() may return a value that encodes more than just the ASCII keycode. 
On all systems, we can ensure that we extract just the ASCII keycode by reading the last byte from the return value like this: 
keycode = cv2.waitKey(1)
if keycode != -1: 
  keycode &= 0xFF

你可能感兴趣的:(cv2.waitKey)