opencv学习(十五)方框滤波boxfilter()//均值滤波blur()//高斯滤波GaussianBlur()(可以此回顾滑动条操作)

opencv源码剖析详见参考书160-165,待深入理解

常用滤波概念

这里写图片描述
这里写图片描述

图像滤波过程

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

1,方框滤波boxfilter()

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

2,均值滤波blur()

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

3,高斯滤波GassianBlur()

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

综合实例

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

//全局变量声明
Mat g_srcimage, g_dstimage1, g_dstimage2, g_dstimage3;
int g_nBoxFliterValue = 3;//方框,均值,高斯滤波参数值
int g_nMeanBlurValue = 3;
int g_nGaussianBlurValue = 3;

//轨迹条的回调函数
static void on_BoxFliter(int, void*);
static void on_MeanBlur(int, void*);
static void on_GaussianBlur(int, void*);

//主函数
int main()
{
    system("color5E");
    g_srcimage = imread("D://1.jpg", 1);
    if (!g_srcimage.data) { printf("错错错\n"); return false; }

    g_dstimage1 = g_srcimage.clone();
    g_dstimage2 = g_srcimage.clone();
    g_dstimage3 = g_srcimage.clone();

    //显示原图
    namedWindow("原图窗口", 1);
    imshow("原图窗口", g_srcimage);

    //1方框滤波
    namedWindow("方框滤波", 1);
    createTrackbar("内核值:","方框滤波",&g_nBoxFliterValue,40,on_BoxFliter);
    on_BoxFliter(g_nBoxFliterValue, 0);


    //2均值滤波
    namedWindow("均值滤波", 1);
    createTrackbar("内核值:", "均值滤波", &g_nMeanBlurValue, 40, on_MeanBlur);
    on_MeanBlur(g_nMeanBlurValue, 0);
    imshow("均值滤波", g_dstimage2);

    //3高斯滤波
    namedWindow("高斯滤波", 1);
    createTrackbar("内核值:", "高斯滤波", &g_nGaussianBlurValue, 40, on_GaussianBlur);
    on_GaussianBlur(g_nGaussianBlurValue, 0);
    imshow("高斯滤波", g_dstimage3);

    //输出提示信息
    cout << endl << "滑动滚动条观察图像效果\n\n"
        << "按下q键退出";
    while (char(waitKey(1)) != 'q') {}
    return 0;



}
//BoxFliter,blur,GassianBlur函数定义
static void on_BoxFliter(int, void*)
{
    boxFilter(g_srcimage, g_dstimage1, -1, Size(g_nBoxFliterValue + 1, g_nBoxFliterValue + 1));
    imshow("方框滤波", g_dstimage1);//与上面的2,3,对比发现,只有将imshow函数置于此才能拖动滑动条改变内核值(2,3默认展示了滤波内核的初始值,无法随滑动条改变而改变)
}
static void on_MeanBlur(int, void*)
{
    blur(g_srcimage, g_dstimage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1),Point(-1,-1));
}
static void on_GaussianBlur(int, void*)
{
    GaussianBlur(g_srcimage, g_dstimage3, Size(g_nGaussianBlurValue*2 + 1, g_nGaussianBlurValue*2+ 1),0,0);
}

猜你喜欢

转载自blog.csdn.net/qq_41553038/article/details/79984462