博客
关于我
opencv waitKey() 函数理解及应用
阅读量:800 次
发布时间:2023-02-23

本文共 1231 字,大约阅读时间需要 4 分钟。

OpenCV中cvWaitKey函数的使用与窗口机制的关系

在OpenCV开发中,cvWaitKey函数的作用主要与窗口机制相关。具体来说,只有当通过namedWindow创建的窗口存在时,cvWaitKey才会发挥作用。如果在调用cvWaitKey之前没有成功创建窗口,那么该函数等效于未执行。

需要注意的是,窗口的创建有两种方式:第一种是调用namedWindow并立即调用imshow;第二种是直接调用imshow。无论是哪种方式,只要在cvWaitKey之前已经创建了窗口,imshow的显示效果才会正常。如果imshow在cvWaitKey之前没有被调用,则等效于未执行。

cvWaitKey函数的定义为:

int cvWaitKey(int delay=0)

该函数返回值类型为int,参数为int型。函数的行为如下:

  • 当delay小于等于0时,如果没有键盘触发,函数将一直等待,返回值为-1。
  • 当delay大于0时,如果没有键盘触发,函数将等待delay的时间,返回值为-1。
  • 如果有键盘按下,函数返回对应的键盘码字。

需要注意的是,在调用cvWaitKey之前必须确保已经创建了窗口。如果没有窗口创建,cvWaitKey将不会起作用。

以下是一个示例代码:

#include <opencv2/highgui.hpp>#include <opencv2/opencv.hpp>#include

#include <math.h>using namespace std; using namespace cv;

int main() {int c = 0;namedWindow("output", CV_WINDOW_AUTOSIZE);

while (true) {    c = waitKey(10000);    if (c == 27) {        cout << "esc" << endl;        break;    }    cout << c << endl;}return 0;

}

在代码中,首先调用namedWindow创建窗口"output",然后进入循环调用cvWaitKey。若按下Esc键(ASCII码27),则输出"esc"并退出循环;否则输出按下的键盘码字。

需要注意的是,在按键处理之前必须先点击namedWindow所在窗口,否则按键事件将无效。

以上代码示例在cv::waitKey(0)后可获取键盘输入。通过检查返回值,可以判断是否有按键按下。特别地,若按下Esc键,可通过(c == 27)判断并执行相应操作。需要注意的是,在OpenCV中,(char)c加或不加与原值无区别,因此无需额外转换。

总之,cvWaitKey函数是OpenCV中处理键盘事件的重要工具,其使用前提是确保已经创建了窗口。正确使用cvWaitKey可以实现键盘事件的响应和处理,丰富OpenCV应用的交互功能。

转载地址:http://clsfk.baihongyu.com/

你可能感兴趣的文章
Openlayers实战:绘制多边形,导出CSV文件
查看>>
Openlayers实战:绘制带箭头的线
查看>>
Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
查看>>
Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
查看>>
Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
查看>>
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>
Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
查看>>
Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
查看>>
Openlayers高级交互(2/20):清除所有图层的有效方法
查看>>
Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
查看>>
Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
查看>>
Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
查看>>
Openlayers高级交互(8/20):选取feature,平移feature
查看>>
Openlayers:DMS-DD坐标形式互相转换
查看>>
openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
查看>>
OpenLDAP(2.4.3x)服务器搭建及配置说明
查看>>
OpenLDAP编译安装及配置
查看>>
Openmax IL (二)Android多媒体编解码Component
查看>>