精华内容
下载资源
问答
  •  初学OpenCV的时候,会学到一个waitKey 函数,用来做图片显示延时。最近在做一个Qt&OpenCV的项目,需要在一个while循环中做程序暂停,于是就想到了waitKey函数,就直接简单粗暴用这个函数作为循环暂停的...


    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注释掉,会看到不同。

    展开全文
  • cvWaitKey函数说明

    万次阅读 2012-06-15 14:12:00
    cvWaitKey()函数的功能是是程序暂停,等待用户触发一个按键操作。但如果该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。  指延时delay ...
    • cvWaitKey(int delay)

      cvWaitKey()函数的功能是是程序暂停,等待用户触发一个按键操作。但如果该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。

       指延时delay ms的时间

       delay<=0时,函数cvWaitKey无限制的等待按键事件,所以显示图像时,需要在cvShowImage("**.bmp",image)后加上cvWaitKey(n)——n为小于等于0的数即可,程序停在显示函数处,不运行其他代码;否则,图像无法正常显示。

        delay>0时,延迟"delay"ms,在显示视频时这个函数是有用的,用于设置在显示完一帧图像后程序等待"delay"ms再显示下一帧视频;如果使用cvWaitKey(0)则只会显示第一帧视频。

      返回值:被按键的值,如果超过指定时间则返回-1。
              如果程序想响应某个按键,可利用if(cvWaitKey(1)==Keyvalue);

      经常程序里面出现if( cvWaitKey(10) >= 0 ) 是说10ms中按任意键退出

    展开全文
  • opencv之cvWaitKey()函数详解

    千次阅读 2019-10-08 19:57:11
    文章目录int cvWaitKey(int k)函数1、参数2、返回值 int cvWaitKey(int k)函数 int cvWaitKey(int k)函数的功能是刷新图像,其中参数k单位是毫秒,表示刷新频率。 1、参数 1、k = 0:无限延时 cvWaitKey(0);//无限...

    int cvWaitKey(int k)函数

    int cvWaitKey(int k)函数的功能是刷新图像,其中参数k单位是毫秒,表示刷新频率。

    1、参数

    1、k = 0:无限延时

    cvWaitKey(0);//无限等待
    

    2、k > 0:延时k毫秒

    cvWaitKey(30);//每个30ms刷新一次
    

    显示函数和刷新函数一起使用,否则无法正常显示。
    因为一条指令 的执行速率约为0.0000000001s,人眼很难捕捉到,必须通过延时函数才能正确显示。

    cv::imshow("image", image);
    cvWaitKey(30);//每个30ms刷新一次
    

    2、返回值

    1、返回值为k毫秒内键盘按键的ASCII码值
    2、若没有按键,则返回-1。

    char KeyValue = 0;
    KeyValue  = cvWaitKey(30);//KeyValue为对应健值的ASCII码值
    
    展开全文
  • 声明:学习中的总结,自己的...延时delay = 0 函数延时无限长,必须有键按下才继续执行。 延时delay > 0 函数返回值为按下的键的ASCII码值,超时则返回-1。 waitKey(0),表示程序会无限制的等待用户的按键事件;

    声明:学习中的总结,自己的笔记。网上好的写的挺乱的,在多篇文章中总结。因为本人不能过目不忘,保险起见做个笔记。

    1. if cv2.waitKey(100) & 0xFF == ord(‘q’)代码的讲解

    基本知识:
    waitKey(delay )在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下键,则继续等待(循环)。有按键按下,返回按键的ASCII值。无按键按下,返回-1。

    • 延时delay = 0 函数则延时无限长,必须有键按下才继续执行。
    • 延时delay > 0 函数返回值为按下的键的ASCII码值,超时则返回-1。

    waitKey(0),表示程序会无限制的等待用户的按键事件;
    waitKey(1),表示程序每1ms检测一次按键,检测到返回按键值,检测不到返回-1;
    waitKey(100),表示程序每100ms检测一次按键,检测到返回按键值,检测不到返回-1;

    测试代码:在这里插入图片描述
    import cv2
    def test():
    lena = cv2.imread(‘lena.jpg’)
    while True:
    cv2.imshow(‘image’, lena)
    print(cv2.waitKey(100))
    if cv2.waitKey(100) & 0xFF == ord(‘q’):#ord() 函数:内置函数;返回值是对应的十进制整数。>>>ord(‘a’) 97
    break;
    if name == ‘main’:
    test()
    在这里插入图片描述
    在我什么按键都没按时,返回结果为-1;当我按“a”时,返回的为97;但我按“d”,返回100;又接连按了几个按键,返回相应的ASCII码。
    note:在英文输入法下操作

    if cv.waitKey(1) & 0xFF == 27指令的介绍

    如: if cv.waitKey(1) & 0xFF == 27:
    break

    注意:esc按键的ASCII为27
    解释: cv.waitKey(1)表示等待按键按下,延迟为1ms;每1ms检测按键是否按下,有按键按下返回按键值;
    如果有esc(esc的ASCII为27)键按下,退出循环(break);
    具体:27 二进制为 0001 1011
    0xFF 为 1111 1111
    0001 1011 & 1111 1111 = 0001 1011;
    因此:当有按键esc 按下时,cv.waitKey(1) & 0xFF == 27为 1;
    执行循环里面的break;跳出循环。

    如:import cv2
    def test():
    lena = cv2.imread(‘lena.jpg’)
    while True:
    cv2.imshow(‘image’, lena)
    print(cv2.waitKey(100))
    if cv2.waitKey(100) & 0xFF == ord(‘q’):
    #ord() 函数:内置函数;返回值是对应的十进制整数。
    #如ord(‘a’) 为 97
    print(“I’m done”)
    break;
    if name == ‘main’:
    test()
    在这里插入图片描述
    解释: if cv2.waitKey(100) & 0xFF == ord(‘q’):
    ord(‘q’):返回q的ASCII值;
    cv2.waitKey(100):每100ms检测一次按键,有q按键按下,返回q的ASCII值;
    功能:当有q按下时,打印I’m done,然后退出

    展开全文
  • 关于waitKey()函数按键无反应情况

    万次阅读 2016-02-06 12:19:04
    - 延时delay毫秒,默认0则延时无限长,必须有键按下才继续执行。 - 函数返回值为按下的键的ASCII码值,没按键则返回-1。 OpenCV: waitKey waitKey Waits for a pressed key. C++: int waitKe
  • cvWaitKey

    2021-01-21 13:44:49
    1、函数形式:int cvWaitKey(intdelay=0 ); 2、函数功能:cvWaitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。 3、参数: delay———延时的毫秒数。 delay<=0时,函数cvWaitKey无限制的等待...
  • cvWaitKey使用

    千次阅读 2014-10-14 16:37:26
    cvWaitKey()函数的功能是是程序暂停,等待用户触发一个按键操作。但如果该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。  指延时delay ...
  • 按下键的时候,焦点要落在窗口上,不能落在...int waitKey(int delay=0)- 延时delay = 0 函数延时无限长,必须有键按下才继续执行。- 延时delay > 0 函数返回值为按下的键的ASCII码值,超时则返回-1。OpenCV: ...
  • cvWaitKey();

    2014-09-29 21:19:00
    1、函数形式:int cvWaitKey(intdelay=0 ); 函数功能:cvWaitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms。 参数: delay———延时的毫秒数。 delay<=0时,函数cvWaitKey无限制的等待按键事件...
  • cvWaitKey()

    2017-03-29 17:45:37
    cvWaitKey(int delay) 指延时delay ms的时间 delay时,函数cvWaitKey无限制的等待按键事件,所以显示图像时,需要在cvShowImage(“**.bmp”,image)后加上cvWaitKey(n)——n为小于等于0的数即可,程序停在显示函数处...
  • 按下键的时候,焦点要落在窗口上,不能落在...int waitkey(int delay=0)- 延时delay = 0 函数延时无限长,必须有键按下才继续执行。- 延时delay > 0 函数返回值为按下的键的ascii码值,超时则返回-1。opencv: ...
  • oepncv CvWaitKey

    2011-08-20 16:30:18
    int cvWaitKey( int delay=0 ) 参数:delay—延时的毫秒数。  delay  delay>0时,延迟"delay"ms,返回值为被按键的值,如果超过指定时间则返回-1。在显示视频时这个函数是有用的,用于设置在显示完一帧
  • python cv2.waitKey(0) 之后没有返回

    千次阅读 2019-05-07 09:51:25
    python cv2.waitKey(0) 显示图片,叉掉之后没有返回,一直在waiting something... 关于waitKey()函数按键无反应情况: ...- 延时delay = 0 函数延时无限长,必须有键按下才继续执行。 - 延时delay ...
  • - 延时delay = 0 函数延时无限长,必须有键按下才继续执行。 - 延时delay > 0 函数返回值为按下的键的ASCII码值,超时则返回-1。 OpenCV: waitKey waitKey Waits for a pressed key. C++: int waitKey(int delay=0...
  • 官方文档内容:二、作用条件1.cmd下只延时2.图像窗口下才能接受按键 一、waitKey()介绍 1.函数原型 int waitKey(int delay = 0); 参数: delay:毫秒ms 2.官方文档内容: @brief Waits for a pressed key. The ...
  • python下cv.waitKey无响应原因

    千次阅读 2017-05-04 16:34:56
    按下键的时候,焦点要落在窗口上,不能落在cmd窗口上。 另外,一般在imshow()后要...- 延时delay = 0 函数延时无限长,必须有键按下才继续执行。  - 延时delay > 0 函数返回值为按下的键的ASCII码值,超时则返回
  • cvWaitKey()函数的功能是是程序暂停,等待用户触发一个按键操作。但如果该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。  指延时delay ...
  • cvWaitKey() - [opencv起步]

    2013-09-12 15:48:23
    版权声明:转载时请以超链接形式标明文章原始出处和...cvWaitKey(int delay) 指延时delay ms的时间  delay  delay>0时,延迟"delay"ms,在显示视频时这个函数是有用的,用于设置在显示完一帧图像后程序等待"del
  • opencv等待函数

    千次阅读 2016-07-08 16:12:47
    cvWaitKey()函数的功能是是程序暂停,等待用户触发一个按键操作。但如果该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。  指延时delay...
  • opencv函数

    2019-04-15 08:19:00
    waitKey() 延时,当参数为0时,一直等待直到按键按下。 getStructuringElement() 返回用于形态学操作的指定形状和尺寸的结构元。 erode() 腐蚀图像 blur() 均值滤波 Canny() 坎尼边缘检测算子 cvtColor()...
  • imread:读入图片函数 cv2.imread('参数一',参数二)#参数一是图片的名称,参数二为0时表示读入的 是灰度图片,1表示彩色图片 ...waitkey:键盘绑定等待延时函数 cv2.waitkey(参数一)参数为0时,表示无限期...
  • =0时,函数cvWaitKey无限制的等待按键事件,所以显示图像时,需要在cvShowImage("**.bmp",image)后加上cvWaitKey(0),即该程序停在显示函数处,不运行其他代码;否则,图像无法正常显示。 delay>...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

waitkey延时函数