均值模糊,高斯模糊,中值模糊,双边模糊

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;


const int g_nTrackbarMaxValue = 9;     //定义轨迹条最大值
int g_nTrackbarValue;                   //定义轨迹条初始值
int g_nKernelValue;                     //定义kernel尺寸
Mat src, dst;

//均值滤波
void on_kernelTrackbar(int,void *)
{
    //根据输入值重新计算kernel尺寸
    g_nKernelValue = g_nTrackbarValue * 2 + 1;

    //均值滤波函数
    blur(src, dst, Size(g_nKernelValue, g_nKernelValue));

    imshow("均值滤波", dst);
}

//高斯滤波
void on_kernelTrackbar2(int, void*)
{
    //根据输入值重新计算kernel尺寸
    g_nKernelValue = g_nTrackbarValue * 2 + 1;

    //均值滤波函数
    GaussianBlur(src, dst, Size(g_nKernelValue, g_nKernelValue),11,11);

    imshow("均值滤波", dst);
}

int main()
{
    
    //原图
    src = imread(".//pic//kate.png",IMREAD_UNCHANGED);
    
    if (!src.data)
    {
        cout << "load error" << endl;
        return -1;
    }
    

    namedWindow("均值滤波", WINDOW_AUTOSIZE);   //定义滤波后图像显示窗口属性
    //定义轨迹条名称和最大值
    char kernelName[20];
    sprintf(kernelName, "kernel尺寸 %d", g_nTrackbarMaxValue);

    //创建轨迹条
    createTrackbar(kernelName, "均值滤波", &g_nTrackbarValue, g_nTrackbarMaxValue, on_kernelTrackbar2);
    on_kernelTrackbar(g_nTrackbarValue, 0);


    waitKey(0);
    return 0;
}

 

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;

Mat src, dst;



int main()
{
    
    //原图
    src = imread(".//pic//1.png",IMREAD_UNCHANGED);
    
    if (!src.data)
    {
        cout << "load error" << endl;
        return -1;
    }
    
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);

    //中值模糊,7为卷积核大小
    //medianBlur(src, dst, 7);
    
    //双边模糊
    //15为计算的半径
    //150:值域上的方差  这个参数的值越大,
    //就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
    //3:空间域的方差   他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。
    bilateralFilter(src, dst, 15, 150, 3);
    

    imshow("双边滤波", dst);

    //边缘锐化
    Mat resultImg;
    Mat kernel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    filter2D(dst, resultImg, -1, kernel, Point(-1, -1), 0);
    imshow("Final", resultImg);
    waitKey(0);
    return 0;
}

 

posted @ 2019-12-06 18:42  喵小喵~  阅读(913)  评论(0编辑  收藏  举报