当前位置:网站首页 > 创业 > 正文

OpenCV:waitKey函数

0 张子豪 张子豪 2025-10-12 08:41 1

绪:

waitKey()函数在显示图像时具有延时的感化;

是OpenCV中的一个根基函数;

本文本家儿要介绍waitKey函数的格局,功能,以及waitKey窗口机制和waitKey的应用;

东西/原料

  • OpenCV 2410

方式/步调

  1. 1

    waitKey格局:

    int waitKey(int delay=0)

    delay-延时的时候,单元ms;

  2. 2

    waitKey函数的功能:

    ①期待x ms,若是在此时代有按键按下,则当即竣事并返回按键的ASCII码,不然返回-1;

    ②若是x=0,则无限期待下去,直到有按键按下;

    【注】:在imshow之后,若是没有waitKey语句则不会显示图像。

  3. 3

    waitKey函数的窗口机制:

    waitKey的延时功能本家儿要针对图像窗口机制的;

    没有窗口,则waitKey号令不执行;

    纯粹的延时用sleep号令;

    void update(void *param) 

        VideoCapture cap; 

        cap.open("test.avi"); 

        if ( !cap.isOpened() ) 

        { 

            return ; 

        } 

     

        for(;;) 

        { 

            cap>>frame; 

            //cvNamedWindow("tmp");//加上这个,再利用waitkey就没问题了 

            //waitKey(100);//利用waitkey法式必心猿意马崩,本家儿如果因为waitkey是对窗口机制起感化的,即namedWindow发生的窗口,若没有发生的窗口,则waitkey半斤八两于未执行,当视频帧很快的被读完,frame为空,天然就出问题了 

     

            Sleep(100);//若利用Sleep,则能正常工作 

        }    

     

    void main() 

        _beginthread(update,0,NULL); 

        Sleep(1000); 

        cvNamedWindow("test"); 

     

        for(;;) 

        { 

            //判空(省略)         

            imshow("test",*frame); 

            waitKey(100); 

        } 

        waitKey(0); 

    }  

  4. 4

    应用:

    #include < opencv2/highgui/highgui.hpp >

    #include < iostream >

    #include < Windows.h >

     

    using namespace cv;

    using namespace std;

     

    int main()

    {

           Mat im;

           double duration;

           im = imread("lena.jpg",0);

     

           // 测试没有namedWindow时的waitKey执行时候

           duration = static_cast<double>(getTickCount());

           waitKey(10000);

           duration = static_cast<double>(getTickCount()) - duration;

           duration /= getTickFrequency();

           cout <<"第一个waitKey运行时候为:" << duration << 's' << endl;

     

           namedWindow("lena");

           imshow("lena",im);

     

           // 测试有namedWindow时的waitKey执行时候

           duration = static_cast<double>(getTickCount());

           waitKey(10000);

           duration = static_cast<double>(getTickCount()) - duration;

           duration /= getTickFrequency();

           cout <<"第二个waitKey运行时候为:" << duration << 's' << endl;

     

           Sleep(20000);

           return 0;

    }

    从执行成果看出,第一个成果并未如期执行,第二个成果如期执行了。这是因为waitKey仅对窗口机制起感化,即namedWindow发生的窗口。若在此之前没有发生窗口,则waitKey半斤八两于未执行。

  5. 5

    注重事项:

    ①waitKey()--这个函数是在一个给心猿意马的时候内(单元ms)期待用户按键触发;若是用户没有按下 键,则接续期待(轮回)

    ②while(1){ if(waitKey(100)==27)break; } 在这个法式中,我们告诉OpenCv期待用户触发事务,期待时候为100ms,若是在这个时候段内, 用户按下ESC(ASCII码为27),则跳出轮回,不然,则跳出轮回

    ③若是设置waitKey(0),则暗示法式会无限制的期待用户的按键事务

注重事项

  • waitKey功能: 期待x ms,若是在此时代有按键按下,则当即竣事并返回按键的ASCII码;
  • waitKey的延时功能本家儿要针对图像窗口机制的;

来源:百闻(微信/QQ号:9397569),转载请保留出处和链接!


本文链接:https://www.ibaiwen.com/web/239726.html

张子豪

张子豪

TA很懒,啥都没写...

@百闻娱乐 本站部分内容转自互联网,若有侵权等问题请及时与本站联系,我们将在第一时间删除处理。 | 粤ICP备2024343649号 | (地图