[C++] opencv - waitKey函数介绍和使用场景

27 篇文章 1 订阅

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 中一个非常有用的函数,它可以让程序在显示图像时暂停一段时间,以便用户可以查看图像并进行交互操作。在实际开发中,我们经常会用到这个函数来实现各种交互功能和控制视频播放帧率。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在C++中,使用OpenCV的resize函数可以实现图像的缩放和放大操作。该函数的原型如下: ```cpp void cv::resize(InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, int interpolation = INTER_LINEAR ); ``` 其中,各参数的含义如下: - `src`:源图像,可以是Mat类型的对象,也可以是其它形式的图像数据。 - `dst`:目标图像,用于存储resize操作后的图像数据,也可以是Mat类型的对象,也可以是其它形式的图像数据。 - `dsize`:目标图像的大小,可以指定为Size类型的对象或者cv::Size()函数。当指定了dsize参数时,fx和fy参数会被忽略。 - `fx`:水平方向的缩放比例,当dsize参数没有指定时才会生效。 - `fy`:垂直方向的缩放比例,当dsize参数没有指定时才会生效。 - `interpolation`:插值方法,可以指定为INTER_NEAREST、INTER_LINEAR、INTER_CUBIC、INTER_AREA、INTER_LANCZOS4等常量之一。 下面是一个简单的示例代码,展示了如何使用resize函数对图像进行缩放操作: ```cpp #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 读取原始图像 Mat src = imread("lena.jpg"); if (src.empty()) { cout << "can not load image!" << endl; return -1; } // 缩放图像 Mat dst; resize(src, dst, Size(src.cols / 2, src.rows / 2), 0, 0, INTER_LINEAR); // 显示原始图像和缩放后的图像 namedWindow("src", WINDOW_NORMAL); namedWindow("dst", WINDOW_NORMAL); imshow("src", src); imshow("dst", dst); waitKey(0); return 0; } ``` 在这个示例代码中,我们首先读取了一张名为lena.jpg的图像,然后调用resize函数对图像进行了缩放操作,将图像的大小缩小为原始图像的一半。最后,我们使用imshow函数将原始图像和缩放后的图像在窗口中显示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老狼IT工作室

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值