• 1 前言
  • 2 waitKey函数与Sleep函数
  • 3 时间刷新程序

1 前言

初学OpenCV的时候,会学到一个waitKey 函数,用来做图片显示延时。最近在做一个Qt&OpenCV的项目,需要在一个while循环中做程序暂停,于是就想到了waitKey函数,就直接简单粗暴用这个函数作为循环暂停的时间计时函数,但后面发现结果不对,经过一整天的debug才发现,这个waitKey并不能起到暂停的功能。仔细读了文档,才发现waitKey并不能单纯的作为时间暂停函数

2 waitKey函数与Sleep函数

众所周知,使用OpenCV的imshow函数显示图片,必须配合waitKey 函数使用,才能将图片显示在windows窗体上。否则,imshow 函数单独使用只能弹出空白窗体,而无法显示图片。
  waitKey的函数原型如下:

CV_EXPORTS_W int waitKey(int delay = 0);  

官方文档介绍如下:

@brief Waits for a pressed key.

@param delay Delay in milliseconds. 0 is the special value that means “forever”.

即,通过一个毫秒为单位的整型参数或者按键事件来决定窗体图片的显示时间。那么,waitKey能否作为一个程序等待函数呢?
  答案是 不能 。
  waitKey 函数给人的感觉是能够执行程序暂停功能,但遗憾的是,该函数仅对GUI窗体有效,官方文档中有一句注意事项

@note

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.

waitKey的时间延迟,只对Windows窗体有效,而且是 namedWindow 函数创造的OpenCV窗体,对于MFC或者Qt这种GUI窗体是否有效是一种未知结果. 从文档的描述来看,waitKey应该是调用了能够控制Mat对象在namedWindow上显示时间的子进程,也就是说,它在程序中以一种并发的方式执行,因此无法起到暂停程序的作用(配合imshow可以)。
  而真正能起到程序暂停的作用的是我们熟悉的Windows API函数Sleep ,在Windows10+VS2013的环境下,其函数原型如下:

WINBASEAPI
VOID
WINAPI
Sleep(_In_ DWORD dwMilliseconds);

该函数能够将程序挂起一段时间,达到真正的暂停功能。但需要注意的是,Sleep函数是windows的底层函数,Linux环境下,会有所不同,不同的编译器也会有不同的定义。

3 时间刷新程序

我们通过Sleep的暂停功能来实现一个10秒钟的时间刷新程序,代码如下:

#include<iostream>
#include<opencv2\opencv.hpp>
#include<facedetect-dll.h>
#include<Windows.h>
#include<chrono>
#include<ctime>
#include<iomanip>using namespace std;int main(){int index = 10;while (index--){auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());cout << "[" << std::put_time(std::localtime(&t), "%y-%m-%d %H:%M:%S") << "]" << endl;cout << "index = " << index << endl;//waitKey(1000);Sleep(1000);system("cls");}return 0;
}

可以分别将waitKey和Sleep注释掉,会看到不同。

OpenCV学习笔记(12):waitKey函数与Sleep函数的不同相关推荐

  1. OpenCV学习笔记(三十六)——Kalman滤波做运动目标跟踪 OpenCV学习笔记(三十七)——实用函数、系统函数、宏core OpenCV学习笔记(三十八)——显示当前FPS OpenC

    OpenCV学习笔记(三十六)--Kalman滤波做运动目标跟踪 kalman滤波大家都很熟悉,其基本思想就是先不考虑输入信号和观测噪声的影响,得到状态变量和输出信号的估计值,再用输出信号的估计误差加 ...

  2. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  3. opencv学习笔记12:图像腐蚀和图像膨胀

    语言:python+opencv 为什么使用图像腐蚀和图像膨胀 如图,使用图像腐蚀进行去噪,但是为压缩噪声. 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并保持原样形状. 图像腐蚀 腐蚀主要针对的是二 ...

  4. OpenCV学习笔记(12)——OpenCV中的轮廓

    什么是轮廓 找轮廓.绘制轮廓等 1.什么是轮廓 轮廓可看做将连续的点(连着边界)连在一起的曲线,具有相同的颜色和灰度.轮廓在形态分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找 ...

  5. 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版)

    经过几天的学习,opencv基础部分学习完啦.整理出来. OpenCV opencv学习笔记1:图片读入,显示与保存(有代码) opencv学习笔记2:图像处理基础 opencv学习笔记3:像素处理 ...

  6. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...

    函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...

  7. opencv学习笔记18:canny算子边缘检测原理及其函数使用

    canny边缘检测原理 去噪:边缘检测容易受到噪声的影响,在此之间,先去噪,通常采用高斯滤波器.opencv学习笔记11:图像滤波(均值,方框,高斯,中值) 梯度:对去噪后的图像采用sobel算子计算 ...

  8. opencv学习笔记16:梯度运算之scharr算子及其函数使用

    前文介绍了sobel算子 opencv学习笔记14:sobel算子及其函数使用 scharr算子理论 系数和sobel不一样,其他一样. scharr函数使用 dst=cv2.Scharr(src,d ...

  9. 检测单击鼠标左键并拖动的消息_计算机视觉OpenCV学习笔记(四):关于鼠标的相关事件函数...

    (7)把鼠标当画笔 本篇目标: 学会使用OpenCV中的鼠标处理的相关事件,事件回调函数怎么去定义,参数有哪些,以及如何注册鼠标监听事件. 7.1 .1 回调函数的定义: 1 def name(eve ...

  10. OpenCV 学习笔记-day13 像素值统计 统计计算最大最小值,平均值和标准差 (minMaxLoc()和meanStdDev()函数的使用)

    OpenCV 学习笔记 day13 像素值统计 函数 minMaxLoc(); 最大值最小值统计 meanStdDev();平均值和标准方差统计 代码 day13 像素值统计 函数 minMaxLoc ...

最新文章

  1. .gitignore和.gitkeep有什么区别?
  2. Android调焦函数,高通Android驱动中的对焦马达的配置
  3. javascript-----DOM文档对象模型
  4. C/C++之Gcc常用参数
  5. 超微服务器 旧系统盘 新服务器,超微服务器做系统
  6. console java_Java Console format()方法与示例
  7. python标准库:collections和heapq模块
  8. C#高级编程之C#基础知识
  9. oracle ogg11.2下载,ogg config for sqlserver 2012 to oracle 11.2(ogg 12.1 to 12.2)
  10. 下载链接|从CAD2004到CAD2022下载安装软件,提升CAD施工图大师一点儿也不难!
  11. ATmega128定时器
  12. 记录一次自己搭建服务器的历程(机架式服务器,Linux系统)
  13. java导航网站_java导航网站
  14. 香橙派 Orangepi Zero2 外壳天线改装
  15. 腾讯云,云点播,视频合成
  16. 优酷路由器刷openwrt固件一
  17. Go(Golang)_12_竞态
  18. 2021-2027全球与中国汽车CMOS图像传感器市场现状及未来发展趋势
  19. 通过javax.mail发送邮件(示例gmail、qq)
  20. Windows分屏拔掉显示器之后软件窗口看不到

热门文章

  1. 下载中小学各个版本电子教材地址
  2. hyper-v安装android
  3. 事业单位,你们为啥不能周末上班周一周二休息?
  4. Fat32 无法存放4G文件 文件分割
  5. 进口书可以到亚马逊买要便宜些
  6. 交换机的堆叠与级连的区别
  7. 刨根问底U3D---Vector3 你到底是蔬菜呢还是水果呢?
  8. 震动筛超声波探头换能器设计
  9. 数据表示,源码、反码、补码、一码
  10. 爬虫之爬取豆瓣排行榜