文章来源:

https://mangoroom.cn/opencv/opencv-learning-waitKey.html

waitKey函数属于opencv函数里既常用又非常基础的函数,无论是刚开始学习opencv,还是使用opencv进行开发调试,都可以看到waitKey函数的身影。然而最基础的东西可能往往容易忽略掉,在此可以好好了解一遍这个基础又常用的waitKey函数。

waitKey函数原型

翻阅opencv的官方文档,可以查阅到该函数的原型为


int cv::waitKey ( int delay = 0 )
Python:
retval = cv.waitKey( [, delay] )

从函数的原型可以了解到该函数以下几点的信息

  • waitKey函数属于cv命名空间
  • 一个int类型的参数,默认值为0,根据delay的名称可以猜测参数值是一个延时值
  • 函数返回值为int类型

以上就是通过函数原型可以解读到的信息了,关于waitKey函数的更多,往下继续了解。

waitKey函数详解

同样地,继续参考权威的opencv官方文档,文档对waitKey函数的解释有

  • 1

Waits for a pressed key.

等待一个按键。 可以理解为此函数的功能是等待一个按键按下。

  • 2

The function waitKey waits for a key event infinitely (when delay≤0 ) or for delay milliseconds, when it is positive. Since the OS has a minimum time between switching threads, the function will not wait exactly delay ms, it will wait at least delay ms, depending on what else is running on your computer at that time. It returns the code of the pressed key or -1 if no key was pressed before the specified time had elapsed.

以上芒果理解为:

函数 Waitkey 在参数delay为正整数n时,延迟n毫秒,或者无限等待按键事件 (delay≤0时) 。由于操作系统在切换线程之间需要时间, 该函数不会等待完全延迟n ms, 它将等待至少延迟n ms, 这具体取决于当时计算机上运行的其他时间。如果在指定的时间之内没有按下键, 则返回按下的键或-1 的ascii码。函数的返回值是键盘按键键值的ascii码。

  • 3

This function is the only method in HighGUI that can fetch and handle events, so it needs to be called periodically for normal event processing unless HighGUI is used within an environment that takes care of event processing.

此函数是 HighGUI 中唯一可以提取和处理事件的方法, 因此需要定期调用它进行正常的事件处理, 除非在处理事件处理的环境中使用 HighGUI。

  • 4

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.

该函数仅在至少创建了一个 HighGUI 窗口并且该窗口处于活动状态时才有效。如果有多个 HighGUI 窗口, 则其中任何一个都可以处于活动状态。

  • 5

delay Delay in milliseconds. 0 is the special value that means "forever".

延迟延迟以毫秒为单位。0是表示 "永远" 的特殊值。即参数值为0时,waitKey函数等待的时间是无限长。


通过以上对官方文档的学习,对waitKey的认识可以归为:waitKey函数是一个等待键盘事件的函数,参数值delay<=0时等待时间无限长,delay为正整数n时至少等待n毫秒的时间才结束。在等待的期间按下任意按键时函数结束,返回按键的键值(ascii码),等待时间结束仍未按下按键则返回-1。该函数用在处理HighGUI窗口程序,最常见的便是与显示图像窗口imshow函数搭配使用

waitKey函数用法

waitKey函数非常基础以及常用,以下是常见的一些用法

  • 1
cv::imshow("windowname", image);
cv::waitKey(0);//任意按键按下,图片显示结束,返回按键键值
  • 2
cv::imshow("windowname", image);
cv::waitKey(10);//等待至少10ms图片显示才结束,期间按下任意键图片显示结束,返回按键键值
  • 3
 VideoCapture cap("video.mp4");
if(!cap.isOpened())
{
return -1;
}
Mat frame;
while(true)
{
cap>>frame;
if(frame.empty()) break;
imshow("windowname",frame);
if(waitKey(30) >=0) //延时30ms,以正常的速率播放视频,播放期间按下任意按键则退出视频播放,并返回键值
break;
}
  • 4
 VideoCapture cap("video.mp4");
if(!cap.isOpened())
{
return -1;
}
Mat frame;
while(true)
{
cap>>frame;
if(frame.empty()) break;
imshow("windowname",frame);
if(waitKey(30) == 27) //延时30ms,以正常的速率播放视频,播放期间按下esc按键则退出视频播放,并返回键值
break;
}

尾巴

waitKey函数是非常简单而且常见的,开始入门的时候需要掌握好它,开发调试的时候waitKey函数同样是一个好帮手。


本文由芒果浩明发布,转载需注明来源。

本文链接:https://mangoroom.cn/opencv/opencv-learning-waitKey.html

opencv学习之等待按键事件-waitKey函数的更多相关文章

  1. PowerBuilder学习笔记之调用事件和函数

    2.7.1调用事件和函数 完整语法:[ObjectName]ancestorclass::[type][when]name([argumnetlist]) 说明:ObjectName:指定函数或事件的 ...

  2. OpenCV学习笔记(15)——更多的轮廓函数

    凸缺陷,以及如何找到凸缺陷 找某一点到一个多边形的最短距离 不同形状的匹配 1.凸缺陷 前面已经设计了轮廓的凸包和凸性缺陷的概念.OpenCV中有一个函数cv2.convexityDefect()可以 ...

  3. OpenCV学习 5:关于平滑滤波器 cvSmooth()函数

    原创文章,欢迎转载,转载请注明出处 本节主要了解下cvSmooth函数的一些参数对结果的影响.从opencv tutorial中可以看到这样一段话: 像我这样的数学渣,还是看下图来得形象: 高斯滤波器 ...

  4. OpenCV学习代码记录——人脸检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  5. OpenCV学习代码记录——canny边缘检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  6. OpenCV学习代码记录——轮廓(contour)检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  7. OpenCV学习:实现简单的图像叠加

    本实例使用简单的线性叠加方法来实现两幅图像的叠加,主要使用的知识如下: 1)线性融合 2)addWeighted函数 //! computes weighted sum of two arrays ( ...

  8. OpenCV 学习笔记 02 处理文件、摄像头和图形用户界面

    在处理文件前需要引入OpenCV库,同时也引入unmpy库 import cv2 import numpy as np 1 基本的读写操作 1.1 图像文件的读写操作 1.1.1 图像文件的读取操作 ...

  9. OpenCV学习:改变图像的对比度和亮度

    本实例演示简单地改变图像的对比度和亮度,使用了如下线性变换来实现像素值的遍历操作: The parameters α > 0 and β often called the gain and bi ...

随机推荐

  1. 「CQOI2014」数三角形

    题目链接 问题分析 可以先任意选\(3\)个数,然后减去三点共线的部分. 三点共线又分\(2\)种情况: 横的或者竖的.这一部分方案数是\(n\times{m\choose 3}+m\times {n ...

  2. Android_(游戏)打飞机01:前言

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  3. 前端学习之三——jquery选择器

    Jquery中的选择器分为几大类:基本过滤选择器,层次选择器,内容过滤选择器,可见性过滤选择器,属性过滤选择器,子元素过滤选择器,表单对象选择器和表单对象属相过滤选择器. 1.非基本过滤选择器,一般需 ...

  4. 剑指offer31----栈的压入、弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对 ...

  5. ES6 正则的扩展(待细读)

    1.RegExp构造函数 在 ES5 中,RegExp构造函数的参数有两种情况. a.参数是字符串,这时第二个参数表示正则表达式的修饰符(flag) var regex = new RegExp('x ...

  6. 自定义View饼状图的绘制

    package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.Canvas ...

  7. Fragment 的 replace 和 add 方法的区别?

    Fragment 本身并没有 replace 和 add 方法,这里的理解应该为使用 FragmentManager 的 replace 和 add 两种方法切换 Fragment 时有什么不同.我们 ...

  8. Maven POM 模板[z]

    https://juejin.im/post/5cc826a5f265da03a33c443a [z]https://juejin.im/post/5cc826a5f265da03a33c443a S ...

  9. vim命令行模式常见快捷方式

    普通模式下的快捷键 快捷键 说明 i insert, 在光标所在处输入 I 在当前光标所在行的行首输入 a append, 在光标所在处后面输入 A 在当前光标所在行的行尾输入 o 在当前光标所在行的 ...

  10. 阶段3 2.Spring_01.Spring框架简介_04.spring发展历程