while (char(waitKey(1)) != ‘q’) {}

相信不少,都是冲着这句代码来的,是不是无法退出?

注意:鼠标必须激活当前窗口, 即鼠标要点一下窗口(图像),不然要是放在cmd窗口,无法键入字符。

下面我们先深入解读waitKey()这个函数。

解读waitKey()函数

OpenCV源码里对这个函数有一段说明:

This function should be followed by cv::waitKey function which displays the image for specified
milliseconds. Otherwise, it won’t display the image. For example, waitKey(0) will display the window
infinitely until any keypress (it is suitable for image display). waitKey(25) will display a frame
for 25 ms, after which display will be automatically closed. (If you put it in a loop to read
videos, it will display the video frame-by-frame)

翻译

这个函数后面应该是cv::waitKey函数,它显示指定的图像。毫秒。否则,它就不会显示图像。例如,waitKey(0)将无限地显示窗口,直到任何按键按下(它适合于图像显示)。waitKey(25)将显示一个框架。25毫秒后,显示将自动关闭。(如果你把它放到一个循环中去读。视频,它将显示视频帧逐帧。

结论:
1.waitKey()与waitKey(0),都代表无限等待,waitKey函数的默认参数就是int delay = 0,故这俩形式本质是一样的。

2.waitKey(n),等待n毫秒后,关闭显示的窗口。

下面3、4的在本文的程序中得到了验证

3.当等待时间内无任何操作时等待结束后返回-1。
4.当等待时间内有输入字符时,则返回输入字符的ASCII码对应的十进制值。

解读:while (char(waitKey(1)) != ‘q’) {}

1.这是个while循环,循环条件是char(waitKey(1)) != ‘q’
2.waitKey(1)为等待1ms,加上while循环,即为无限等待,当输入字符则waitKey()返回当前字符的ASCII码对应的十进制值,然后char()将ASCII码转换为字符,最后判断是否与‘q’对等。若键入字符为q,则停止循环,窗口不再等待,即退出窗口了。

其实

把char去掉也可以,这里进行了自动类型转换。
即while (waitKey(1)) != ‘q’) {},也能达到效果

还有其他形式的写法

1.while ((char)waitKey(1) != ‘q’) {} ,用char强转类型

2.while (1) { if (waitKey(1) == ‘q’) { break; } },这种也可以达到效果

/***Copyright (c) 2018 Young Fan.All Right Reserved.*Filename: 4.1 testWaitKey*Author: Young Fan*Date: 2018.4.20*OpenCV version: 3.4.1*IDE: Visual Studio 2017*Description: 研究与测试WaitKey()函数*/#include<opencv2/opencv.hpp>
#include <iostream>using namespace std;
using namespace cv;int main()
{namedWindow("Test1");//鼠标必须激活当前窗口, 即鼠标要点一下窗口,不然要是放在cmd窗口,无法键入字符//下面的1~6部分,最好单独分别运行,才能顺利验证各个部分//1.cout << endl << "按下“q”键时,程序退出。\n";while ((char)waitKey(1) != 'q') {}//2.//while (waitKey(1) != '1') {}//3.//while (1) { if (waitKey(1) == 'q') { break; } }//或者这样写,//4.//cout << waitKey() << endl;;//按下字符,会打印显示当前键入得ASCII码对应的十进制值,即键盘上的字符//5.//int x = waitKey();//按下字符,会打印显示当前键入得ASCII码对应的十进制值//cout << " x = " << x << endl;//6.//char y = waitKey();//按下字符,会打印显示当前键入得ASCII码//cout << " y = " << y << endl;//7.int c = waitKey(2);//等待时间内无任何操作时等待结束后返回-1cout << " c = " << c << endl;//输出c = -1return 0;
}

OpenCV中waitKey()函数的深度解析相关推荐

  1. OpenCV中waitKey()函数失效问题汇总(按键失效、按键不灵、按键导致程序崩溃)

    提示:阅读文章,大约需要3分钟 问题描述 在使用OpenCV编程的时候,我们经常会使用按键等待函数:waitKey(),大家可能会用它来作为 延迟.等待用户输入按键的功能使用,以下列出了在使用过程中遇 ...

  2. openCV中waitKey函数介绍

    #include <opencv2/opencv.hpp> #include < iostream > #include <window.h> using name ...

  3. go float64 转int_深挖Go函数之深度解析(下):可变参数

    接连两篇函数专题深度解析,相信大家已经对函数的语法有了深入的了解. 函数简单使用和基本知识解析 匿名函数和闭包 这次给大家带来了一个函数的特性[可变参数],作为函数专题的结束. 有没有发现? 我们有时 ...

  4. echo 框架中的 middleware 设计深度解析

    关注我,了解更多源码设计及实现细节... echo 框架中的 middleware 设计深度解析 " echo web 框架是 go 语言开发的一种高性能,可扩展,轻量级的web框架.几行代 ...

  5. Opencv中直方图函数calcHist

    Opencv中直方图函数calcHist calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解 ...

  6. OpenCV中flip函数实现

    一.flip()函数原型介绍 void cv::flip(InputArray src,OutputArray dst, int flipCode) 各参数含义 src:输入图像. dst:输出图像. ...

  7. OpenCV中initUndistortRectifyMap函数存在bug原因探究

    原文首发于公众号「3D视觉工坊」:OpenCV中initUndistortRectifyMap函数存在bug原因探究. 最近在运行如下一段代码时,生成的mapx和mapy有点异常. 代码片段如下: # ...

  8. 转载:opencv中imshow函数运行中断的解决办法

    OpenCV中 imshow函数运行中断的解决方法 羊和咩咩 2017-03-10 16:00:49 5919 收藏 最后发布:2017-03-10 16:00:49首发:2017-03-10 16: ...

  9. 关于opencv中cvtcolor函数的code参数用CV_BGR2YUV与CV_BGR2YCrCb的了解

    根据Opencv中cvtcolor函数的源码描述,,参数CV_BGR2YCrCb用的系数为[1868, 9617, 4899, 11682, 9241], 而参数CV_BGR2YUV对应的系数只是将C ...

最新文章

  1. mysql数据库表生成jpa注解_Eclipse 通过JPA自动生成注解实体
  2. 使用ECLIPSE制作可执行文件
  3. JVM中垃圾收集算法
  4. css中width:100%与width:auto的区别
  5. 前端小知识点(10):原型链
  6. 数据流技术在GPU和大数据处理中的应用
  7. pytorch图像数据增强N大技巧
  8. DatagramPacket.getData()与DatagramPacket.getLength()的误区
  9. 怎么管理员工混工时的现象?
  10. Vue中点击url下载文件-案例
  11. orgChart实现多重树状图结构
  12. 1每天Python小例-12306爬虫#WinError 2
  13. MSDN资源下载网站源码
  14. google authenticator python_谷歌验证器(Google Authenticator)
  15. 【JAVA大厂面试必问】大厂面试八股文整理, 中厂小厂也爱问的八股文!
  16. insmod modprobe
  17. MapReduce基本概述——分布式计算框架
  18. 双球坐标系_2.1 天球坐标系和地球坐标系
  19. 个人日记-学习究竟是什么读后感4-2020/7/19
  20. [清华集训2014]奇数国

热门文章

  1. 刘鹏教授接受新华日报财经客户端采访:智能制造应用落地生根,“江苏智造”进入快速增长期...
  2. 机器学习-线性模型及广义线性模型
  3. [软件评测第九期]蚁丘保卫战(Anthi…
  4. 数字信号处理(一)绪论
  5. H - Unloaded Die
  6. 推荐一款IDEA 快捷键 自动提示插件
  7. Latex如何插入多个图片,实现并排排列或者多行多列排列
  8. MySQL基础篇 | 连接查询、子查询(嵌套)
  9. OO系统分析员之路--用例分析系列(2)--用例的类型与粒度
  10. 【Kubernetes 系列】一文带你吃透 K8S 应用pod结点