waitKey()函数的一些用法

声明:学习中的总结,自己的笔记。网上好的写的挺乱的,在多篇文章中总结。因为本人不能过目不忘,保险起见做个笔记。

1. if cv2.waitKey(100) & 0xFF == ord(‘q’)代码的讲解

基本知识:
waitKey(delay )在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下键,则继续等待(循环)。有按键按下,返回按键的ASCII值。无按键按下,返回-1。

  • 延时delay = 0 函数则延时无限长,必须有键按下才继续执行。
  • 延时delay > 0 函数返回值为按下的键的ASCII码值,超时则返回-1。

waitKey(0),表示程序会无限制的等待用户的按键事件;
waitKey(1),表示程序每1ms检测一次按键,检测到返回按键值,检测不到返回-1;
waitKey(100),表示程序每100ms检测一次按键,检测到返回按键值,检测不到返回-1;

测试代码:waitKey()函数的一些用法
import cv2
def test():
lena = cv2.imread(‘lena.jpg’)
while True:
cv2.imshow(‘image’, lena)
print(cv2.waitKey(100))
if cv2.waitKey(100) & 0xFF == ord(‘q’):#ord() 函数:内置函数;返回值是对应的十进制整数。>>>ord(‘a’) 97
break;
if name == ‘main’:
test()
waitKey()函数的一些用法
在我什么按键都没按时,返回结果为-1;当我按“a”时,返回的为97;但我按“d”,返回100;又接连按了几个按键,返回相应的ASCII码。
note:在英文输入法下操作

if cv.waitKey(1) & 0xFF == 27指令的介绍

如: if cv.waitKey(1) & 0xFF == 27:
break

注意:esc按键的ASCII为27
解释: cv.waitKey(1)表示等待按键按下,延迟为1ms;每1ms检测按键是否按下,有按键按下返回按键值;
如果有esc(esc的ASCII为27)键按下,退出循环(break);
具体:27 二进制为 0001 1011
0xFF 为 1111 1111
0001 1011 & 1111 1111 = 0001 1011;
因此:当有按键esc 按下时,cv.waitKey(1) & 0xFF == 27为 1;
执行循环里面的break;跳出循环。

如:import cv2
def test():
lena = cv2.imread(‘lena.jpg’)
while True:
cv2.imshow(‘image’, lena)
print(cv2.waitKey(100))
if cv2.waitKey(100) & 0xFF == ord(‘q’):
#ord() 函数:内置函数;返回值是对应的十进制整数。
#如ord(‘a’) 为 97
print(“I’m done”)
break;
if name == ‘main’:
test()
waitKey()函数的一些用法
解释: if cv2.waitKey(100) & 0xFF == ord(‘q’):
ord(‘q’):返回q的ASCII值;
cv2.waitKey(100):每100ms检测一次按键,有q按键按下,返回q的ASCII值;
功能:当有q按下时,打印I’m done,然后退出