目录
实验原理
简单、常用的键盘事件是等待按键事件,它由 waitKey 函数来实现。无论是刚开始学习 OpenCV,还是使用 OpenCV 进行开发调试,都可以看到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
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap("003.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; //键则退出视频播放,并返回键值
}
return 0;
}
例2
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap("003.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;//键则退出视频播放,并返回键值
}
return 0;
}