📜  用于模糊视频的 OpenCV C++ 程序(1)

📅  最后修改于: 2023-12-03 15:40:54.766000             🧑  作者: Mango

用于模糊视频的 OpenCV C++ 程序

本文介绍了一个基于 OpenCV 和 C++ 的程序,用于对视频进行模糊处理。本程序可以实现高斯模糊、均值模糊、中值模糊等多种模糊效果,并支持自定义模糊半径和核函数大小。

程序实现

本程序使用了 OpenCV 提供的模糊函数进行图像处理。以下是程序中主要用到的函数及其功能:

  • cv::GaussianBlur():高斯模糊函数,可根据指定的模糊半径和标准差实现不同强度的模糊效果;
  • cv::blur():均值模糊函数,可根据指定的核函数大小实现不同强度的模糊效果;
  • cv::medianBlur():中值模糊函数,可根据指定的核函数大小实现不同强度的模糊效果。

以下是程序的核心代码:

// 读取视频帧
cv::VideoCapture cap("test.mp4");
if (!cap.isOpened()) {
    std::cerr << "Error: failed to open video file." << std::endl;
    return -1;
}

// 创建窗口
const char* windowName = "Blurred Video";
cv::namedWindow(windowName);

// 声明变量
cv::Mat frame, blurredFrame;
int blurRadius = 3;
int kernelSize = 3;
int blurType = 0;

// 循环处理视频帧
while (cap.read(frame)) {
    // 处理每一帧
    switch (blurType) {
        case 0: // 高斯模糊
            cv::GaussianBlur(frame, blurredFrame, cv::Size(blurRadius, blurRadius), 0);
            break;
        case 1: // 均值模糊
            cv::blur(frame, blurredFrame, cv::Size(kernelSize, kernelSize));
            break;
        case 2: // 中值模糊
            cv::medianBlur(frame, blurredFrame, kernelSize);
            break;
    }

    // 显示处理后的帧
    cv::imshow(windowName, blurredFrame);

    // 处理键盘输入
    int key = cv::waitKey(30);
    if (key == 27) { // ESC
        break;
    } else if (key == '1') { // 高斯模糊
        blurType = 0;
    } else if (key == '2') { // 均值模糊
        blurType = 1;
    } else if (key == '3') { // 中值模糊
        blurType = 2;
    } else if (key == '+' || key == '=') { // 增加模糊半径或核函数大小
        if (blurType == 0) {
            blurRadius += 2;
        } else {
            kernelSize += 2;
        }
    } else if (key == '-' || key == '_') { // 减小模糊半径或核函数大小
        if (blurType == 0) {
            blurRadius = std::max(blurRadius - 2, 1);
        } else {
            kernelSize = std::max(kernelSize - 2, 1);
        }
    }
}

// 释放资源
cap.release();
cv::destroyAllWindows();
程序运行

本程序需要输入一个视频文件的路径,该文件可以是常见格式的视频文件。程序会在运行时创建一个窗口,用于实时显示处理后的视频。用户可以通过按键来切换不同的模糊效果,以及增加或减小模糊半径或核函数大小。

以下是程序运行的示例:

$ ./blur_video test.mp4

blur_video_screenshot

总结

本程序演示了如何使用 OpenCV 中的模糊函数对视频进行模糊处理,可以为图像处理、视频编辑等领域提供实用的工具。开发者可以在此基础上进一步扩展功能,实现更多的图像处理效果。