首页 > 编程笔记 > C++笔记 阅读:13

OpenCV waitKey()键盘事件的用法(附带实例)

简单、常用的键盘事件是等待按键事件,它由 waitKey() 函数来实现。

waitKey() 函数延时一定时间,返回按键的值;当参数为 0 时就永久等待,直到用户按键。该函数声明如下:
int cv::waitKey(int delay = 0) ;
其中参数 delay 是延时的时间,单位是毫秒,默认是 0,表示永久等待。该函数在至少创建了一个 HighGUI 窗口并且该窗口处于活动状态时才有效。如果有多个 HighGUI 窗口,则其中任何一个都可以处于活动状态。

waitKey() 函数是一个等待键盘事件的函数,当参数值 delay≤0 时,等待时间无限长。当 delay 为正整数 n 时,至少等待 n 毫秒才结束。在等待期间,如果任意按键被按下,则函数结束,返回按键的键值(ASCII 码)。如果等待时间结束用户仍未按下按键,则函数返回 -1。该函数用在处理 HighGUI 窗口的程序中,常与显示图像窗口的 imshow() 函数搭配使用。

比如配合图像显示时的常见用法如下:
实例 1:
cv::imshow("windowname", image);
cv::waitKey(0);// 任意按键被按下,图片显示结束,返回按键的键值

实例 2:
cv::imshow("windowname", image);
cv::waitKey(10);// 等待至少10ms图片显示才结束,期间按下任意按键图片显示结束,返回按键的键值

视频播放时的常见用法如下:
实例 1:
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;
}

实例 2:
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() 函数是非常简单而且常见的,读者开始入门的时候需要掌握好它,它在开发调试的时候同样是一个好帮手。

相关文章