OpenCV 是一个开源的计算机视觉库,它包含了许多用于图像处理和计算机视觉任务的函数。其中,waitKey() 是 OpenCV 中的一个非常有用的函数,它可以让程序在显示图像时暂停一段时间,以便用户可以查看图像并进行交互操作。
一、waitKey() 函数的介绍
waitKey() 函数是 OpenCV 中用于等待用户按键输入的一个函数。它的原型如下:
int waitKey(int delay = 0);
其中,delay 参数表示程序在显示图像后要等待的时间,单位为毫秒。如果 delay 参数被省略,则默认值为 0,即程序会一直等待用户按键输入,直到用户手动关闭窗口为止。
二、waitKey() 函数的使用场景
在显示图像时添加交互功能
使用 waitKey() 函数可以在显示图像时添加交互功能,例如让用户通过按键来控制程序的行为。例如,可以使用 waitKey() 函数来实现以下功能:
- 当用户按下任意键时,程序继续执行;
- 当用户按下 ESC 键时,程序退出;
- 当用户按下空格键时,程序切换到下一个图像。
while (true) {
// 对图像进行处理
imshow("Image", image);
if (waitKey(0) == 27) { // 如果用户按下 ESC 键,退出循环
break;
}
}
在图像处理过程中添加延迟
在一些图像处理任务中,需要对图像进行多次处理才能得到最终结果。为了避免程序运行过快,可以在每次处理图像之间添加一定的延迟。这时,就可以使用 waitKey() 函数来实现延迟功能。例如,可以使用以下代码来实现每隔 500 毫秒显示一次图像:
while (true) {
// 对图像进行处理
imshow("Image", image);
if (waitKey(500) == 27) { // 如果用户按下 ESC 键,退出循环
break;
}
}
在动画效果中控制帧率
在一些动画效果中,需要控制帧率以保证动画的流畅性。这时,就可以使用 waitKey() 函数来控制帧率。例如,可以使用以下代码来实现每隔 100 毫秒显示一帧图像:
for (int i = 0; i < totalFrames; i++) {
// 显示当前帧
imshow("Frame " + to_string(i), frames[i]);
if (waitKey(100) == 27) { // 如果用户按下 ESC 键,退出循环
break;
}
}
三、完整代码实例
下面是一个完整的代码示例,演示了如何使用 waitKey() 函数来实现在显示图像时添加交互功能:
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat image = imread("test.jpg");
if (image.empty()) {
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
namedWindow("Image", WINDOW_NORMAL);
while (true) {
// 对图像进行处理
imshow("Image", image);
if (waitKey(0) == 27) { // 如果用户按下 ESC 键,退出循环
break;
}
}
return 0;
}
四、总结
waitKey() 函数是 OpenCV 中一个非常有用的函数,它可以让程序在显示图像时暂停一段时间,以便用户可以查看图像并进行交互操作。在实际开发中,我们经常会用到这个函数来实现各种交互功能和控制视频播放帧率。