博客
关于我
opencv waitKey() 函数理解及应用
阅读量:791 次
发布时间: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/

你可能感兴趣的文章
Objective-C实现循环队列链表算法(附完整源码)
查看>>
Objective-C实现快速排序算法(附完整源码)
查看>>
Objective-C实现打印魔方矩阵(附完整源码)
查看>>
Objective-C实现打格点算法(附完整源码)
查看>>
Objective-C实现批量修改文件类型算法(附完整源码)
查看>>
Objective-C实现找出一个数的质因数primeFactors算法(附完整源码)
查看>>
Objective-C实现找出买卖股票的最大利润算法(附完整源码)
查看>>
Objective-C实现摄氏温度和华氏温度互转(附完整源码)
查看>>
Objective-C实现操作MySQL(附完整源码)
查看>>
Objective-C实现操作注册表 (附完整源码)
查看>>
Objective-C实现改变图片亮度算法(附完整源码)
查看>>
Objective-C实现数字图像处理算法(附完整源码)
查看>>
Objective-C实现数组去重(附完整源码)
查看>>
Objective-C实现数组的循环左移(附完整源码)
查看>>
Objective-C实现数除以二divideByTwo算法(附完整源码)
查看>>
Objective-C实现文件分割(附完整源码)
查看>>
Objective-C实现文件的删除、复制与重命名操作实例(附完整源码)
查看>>
Objective-C实现无序表查找算法(附完整源码)
查看>>
Objective-C实现无锁链表(附完整源码)
查看>>
Objective-C实现时间戳转为年月日时分秒(附完整源码)
查看>>