python开发之HighGUI上位机开发(二)

继上一篇博文:python开发之HighGUI上位机开发(一)
这篇博文主要分析HighGUI上位机开发过程中的一些项目实战开发的重点函数分析 。 主要包括:键盘事件监听、窗口销毁、窗口显示图像、滑动条组件、按键组件以及鼠标事件监听 。。 字数可能有点多 , 请慢慢学习查看 , 相信你肯定会有所收获
作者:ywsydwsbn博客主页:时间:2020-08-25 20:48字数:10914简介:先点赞再看 , 养成习惯!!!
python开发之HighGUI上位机开发(二)

  • 键盘事件监听
    • waitKey函数API讲解
    • demo例子:waitkey_demo.py
  • 窗口销毁
    • 销毁窗口API讲解
    • 关闭单个窗口的样例
    • 关闭所有窗口的样例
  • 综合实验-窗口显示图像
    • 综合实验1 - 单个窗口展示图像
    • 综合实验2 - 同时展示多个窗口
  • 滑动条组件
    • 创建滑动条
    • 设置滑动条的位置
    • 获取滑动条的位置
    • 实例1-单个Trackbar
    • 实例2-设定trackbar的默认取值
    • 实例3-获取多个Trackbar的Pos
  • 按键组件
    • 按键组件的潜规则
    • 演示代码
    • 展示效果
  • 鼠标事件监听
    • 鼠标事件分类
    • 鼠标事件列表(event list)
    • 鼠标事件的回调参数
键盘事件监听HighGUI里面的有waitKey键盘事件监听函数 , 文章最后提供了一个waitKey的Demo 。
键盘监听事件如下:
python开发之HighGUI上位机开发(二)文章插图
waitKey函数API讲解讲一下opencv中一个键盘事件监听函数waitKey
cv2.waitKey(delay_ms)1这个函数其实有两个功能:
  1. 等待一个按键事件的发生
  2. 延时delay_ms个毫秒
它的逻辑是这样的 ,如果过了n个ms仍然也没等到有按键事件发生 ,就继续执行下面的函数 ,所以变相等于延时(delay) 。
注意,这个函数只有在当前至少有一个窗口是激活状态下 ,才会生效
换句话说:
  • 如果你在这期间 ,点开了另外一个无关窗口 ,无论你怎么按键都不会响应 。
  • 如果等待设置为0, 就意味着永久等待 ,直到有任意一个按键按下 。
cv2.waitKey(0)1
  • waitKey 返回的数值 是按下的按键字符 , 对应的ASCII编码 。
key_num = cv2.waitKey(0)1
  • 如果是等待有限时间例如 , 如果等待1000ms 也就是1s之后 ,没有按键按下 ,那么返回的这个值就是-1
key_num = cv2.waitKey(1000)1我们在进行按键字符匹配的时候 ,一般不会直接比对字符数值 。
你可以使用python的强制类型转换 ,将数值转换为字符串chr(value)
例如:我们判断 ,按键是否是k键的时候 ,判断可以这么写:
key_num = cv2.waitKey(0)if chr(key_num) == 'k':print("k pressed...")1234或者 , 你可以这么写
我们利用函数ord(char) ,可以将字符 , 转换为对应ASCII编码的数值:
key_num = cv2.waitKey(0)if key_num == ord('k'):print("k pressed...")1234demo例子:waitkey_demo.pyimport cv2# 创建一个窗口cv2.namedWindow('image')while True:# 等待按键事件发生key_code = cv2.waitKey(1000)if key_code != -1:print('key {} pressed!!! value=http://kandian.youth.cn/index/{}'.format(chr(key_code), key_code))if chr(key_code) == 'q':# 退出程序print('Quit')breakelse:# 没有按键按下print('no key pressed , wait 1s')cv2.destroyWindow('image')1234567891011121314151617181920窗口销毁讲解如何销毁窗口
销毁窗口API讲解销毁所有窗口:
cv2.destroyAllWindows()1销毁单个窗口, 传入要销毁的窗口名称:
cv2.destroyWindow(window_name)1关闭单个窗口的样例等待任意按键按下 , 然后关闭特定的窗口
import cv2# 创建一个窗口cv2.namedWindow('image')# 等待键盘按键按下cv2.waitKey(0)# 销毁窗口cv2.destroyWindow('image')12345678910思考题: 如果我不加cv2.destroyWindow会怎么样 ,如果意外中断程序 , 窗口会怎么样?
python开发之HighGUI上位机开发(二)文章插图
关闭所有窗口的样例import cv2# 创建一个窗口cv2.namedWindow('image1')cv2.namedWindow('image2')cv2.namedWindow('image3')# 等待键盘按键按下cv2.waitKey(0)# 销毁所有窗口cv2.destroyAllWindows()1234567891011
python开发之HighGUI上位机开发(二)文章插图
会产生三个image窗口 , 按下任意键后 , 三个窗口同时销毁 。。。
综合实验-窗口显示图像讲解了如何使用HighGUI显示单张图片 , 以及在多个窗口上显示图片