opencv学习中if cv2.waitKey(1) == ord(‘q’):break的困惑

cv2.waitKey()简述

首先要知道cv.waitKey()是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒
cv2.waitKey(delay):

delay≤0:一直等待按键;
delay取正整数:等待按键的时间(ms)。
该函数的返回值:
等待期间有按键:返回按键的ASCII码(比如:Esc的ASCII码为27);
等待期间没有按键:返回 值为-1;
需要注意的是:如果使用的是64位的计算机,cv.waitKey()函数的返回值与0xff按位相与操作,取其低八位,再与27(Esc的ASCII码为27)比较,或者这样cv2.waitKey(10) & 0xff == ord(‘q’),ord函数是取其ASCII编码,当然换成其他的字符也行只要ASCII码对应就行。

说白了就是对键盘事件进行delay(ms)的等待(delay=0则为无限等待),若触发则返回该按键的ASSIC码(否则返回-1)

使用范例:


import cv2capture = cv2.VideoCapture(0)while(True):# 获取一帧ret, frame = capture.read()cv2.imshow('frame', frame )if cv2.waitKey(1) == ord('q'): # 按'q'键推出break

事实上在实际代码中当我有多个键需要控制时,我发现偶现性得出现bug:代码如下

import cv2
capture = cv2.VideoCapture(0)
while(True):# 获取一帧ret, frame = capture.read()cv2.imshow('frame', frame )if cv2.waitKey(1) == ord('s'): # 按's'键保存图片cv2.imwrite("./output/ple.png", frame)print('图片保存成功')elif cv2.waitKey(1) == ord('q'): # 按'q'键推出break

运行代码后,对于键’s‘,它保存图片时没有任何问题,但当我按下键’q’时,窗口无法关闭。或者有时候需要长按或者不停得按才有效果,体验非常不好,而不是键’s‘,我尝试了相同的其他键,问题依然存在。
于是我通过各方查找资料得知:
多次调用cv2.waitKey(1)方法,在这种情况下,应该为cv2.waitKey(1)使用变量,因为等待是两个函数调用都读取键盘缓冲区,因此只有当软件在计算第一个分支(q)后立即接收到s键时,才会执行第二个分支。且这种情况下容易造成资源浪费,倘若电脑性能差点意思,那么…崩了
于是将上述代码改为:

pressedKey = cv2.waitKey(1) & 0xFF
if pressedKey == ord('s'):  # 按’s‘ 保存图片Ccv2.imwrite("./output/ple.png", frame)  # 保存路径print('图片已保存')
elif pressedKey == ord('q'):  # 按下‘q’退出break

完美解决问题,NICE!

opencv python:使用cv2.waitKey(1)控制多个按键相关推荐

  1. opencv python 中cv2.putText()函数的用法

    opencv python 中cv2.putText()函数的用法 文章目录: 一.快速使用 二.官方文档 三.使用举例 虽然用啦很多次,还是决定记录一下 一.快速使用 cv2.putText(ima ...

  2. opencv python教程简书_Python-OpenCV —— 基本操作一网打尽

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.MacOS操作系统上.它轻量级而且高效--由一系列 C 函数和少量C++类构成,同时提供了Pyt ...

  3. OpenCV python 播放视频文件(.avi)

    OpenCV python 播放视频文件(.avi) 同文件夹存放文件[test.avi] import cv2def main():# 1.初始化读取视频对象cap = cv2.VideoCaptu ...

  4. opencv python安装 centos_centos下安装opencv

    根据项目需要,安装opencv并提供给开发使用,并且使用opencv提供python3的API接口.虽然不知道是个啥,还是简单了解下. opencv是什么? OpenCV的全称是Open Source ...

  5. python模块cv2人脸识别_手把手教你使用OpenCV,Python和深度学习进行人脸识别

    使用OpenCV,Python和深度学习进行人脸识别 在本教程中,你将学习如何使用OpenCV,Python和深度学习进行面部识别.首先,我们将简要讨论基于深度学习的面部识别,包括"深度度量 ...

  6. 【涵子来信python大全】——第二季——opencv第四篇-用手势控制屏幕鼠标

    各位亲爱的读者,博主: 大家好,我是涵子.今天我们需要使用cv2,mediapipe和pyautogui用手势控制屏幕鼠标. 目录 一.准备 二.代码 可以先去看看之前的文章哦. 一.准备 首先pip ...

  7. Python,OpenCV图像金字塔cv2.pyrUp(), cv2.pyrDown()

    Python,OpenCV图像金字塔cv2.pyrUp, cv2.pyrDown 1. 效果图 2. 原理 2.1 什么是图像金字塔 2.2 金字塔分类 2.3 应用 3. 源码 参考 这篇博客将介绍 ...

  8. python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...

    作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...

  9. python opencv显示图片一闪而过_解决Opencv+Python cv2.imshow闪退问题

    Opencv+Python cv2.imshow闪退 # 读入原始图像 origineImage = cv2.imread('./pic/6.jpeg') # 图像灰度化 # image = cv2. ...

最新文章

  1. CTA核心技术及应用峰会开幕!(附第二日参会攻略)
  2. SOC/LM在台湾的2011年发展趋势研判
  3. 大连Linux内核开发,如何查看linux内核版本
  4. 谷歌喊话三星:别再搞 Linux 内核代码了,安卓安全也不保了
  5. ActiveMQ简单介绍以及安装
  6. 跟想这台计算机usb无法识别,无法识别的USB设备:跟这台计算机连接的一个USB设备运行不正常,WINDOWS无法识别...
  7. serve注解是加在哪个类_不会 Java 注解 ? 看这一篇文章!
  8. c++模板函数实例化的偏序机制
  9. 智慧工地解决方案施工升降机智能监控系统
  10. 实战技巧:网站死链检测及处理方法!
  11. mysql导出数据为txt时报错:The MySQL server is running with the --secure-file-priv option so it cannot execut
  12. netty官方例子 三 http snoop监听
  13. 中国第一大微商TST涉嫌传销案听证会结束
  14. 分析师不死心 仍坚信微软终将成功并购雅虎
  15. 全民一起玩Python提高篇第十二课:面向对象基本原理与语法(三)
  16. vue3以及vue2自定义封装v-model
  17. 帝国cms如何导入php模板,帝国cms模板导入导出及模板组功能介绍
  18. bootstrap-select插件angularjs爬坑
  19. 网上超市app开发现成源码对接
  20. js输出当前时间,以及计算学生成绩的demo

热门文章

  1. mysql如何给表加密_sql怎么加密表
  2. ROSMoveit中机械臂的点动(Jog)实现
  3. 量子计算机三种,MIT发现第三种磁性 可造量子计算机?
  4. http,https
  5. java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol
  6. linux下的go富集分析,GO富集分析(转载)-Go语言中文社区
  7. jmeter压力测试报告
  8. python大数相乘
  9. LibreCAD+Mingw编译记录
  10. 【经典算法】·二分法