2020.10.31 使用OpenCV进行图像模糊 【OpenCV C++】

去除图像噪声

1.均值滤波

2.中值滤波(还有最小,最大值滤波)

3.高斯滤波

4.双边滤波

(起到一种模糊的作用)

具体采用哪一种滤波手段,需要根据自己对图像后续的处理要求有关,然后选择合适的图像预处理滤波方法。

源代码:

// testOpencv08.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main()
{
    //std::cout << "Hello World!\n";
    Mat src, dst;
    const char* inputWindow = "input image";
    const char* outputWindow = "output image";

    src = imread("E:/imageSources/7.jpg");
    if (!src.data) {
        printf("can not load image");
        return -1;
    }

    namedWindow(inputWindow,WINDOW_AUTOSIZE);
    imshow(inputWindow,src);

    Mat kernal = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    Mat result;
    //均值滤波(平滑噪声)
    //SIZE的大小选择为奇数(因为需要一个单着的像素)
    //blur(src,dst,Size(25,1),Point(-1,-1));
    //高斯滤波
    //GaussianBlur(src,dst,Size(25,1),11,11);
    //中值滤波
    //medianBlur(src,dst,3);
    //高斯双边滤波

    //120处理阈值
    bilateralFilter(src, dst, 5, 120, 3);
    
    namedWindow(outputWindow, WINDOW_AUTOSIZE);
    imshow(outputWindow, dst);
    filter2D(dst, result, -1, kernal, Point(-1, -1), 0);
    imshow("yanmo image", result);

    waitKey(0);
    return 0;
}

采用双边模糊,再用掩膜处理图像结果:

2020.10.31 使用OpenCV进行图像模糊 【OpenCV C++】

可以看到经过双边处理(双边模糊会保护边缘信息)后,再用掩膜处理,将边缘信息更加凸显出来。人物轮廓更加凸显出来,脸部立体感更强了。