码迷,mamicode.com
首页 > 其他好文 > 详细

【opencv入门之五】线性滤波(方框滤波、均值滤波、高斯滤波)

时间:2017-09-20 23:29:54      阅读:443      评论:0      收藏:0      [点我收藏+]

标签:orm   存储   大小   roc   显示   enc   回调函数   滚动条   bool   

参考网站:http://blog.csdn.net/poem_qianmo/article/details/22745559

 

1、boxFilter函数——方框滤波

void boxFilter(InputArray src,    //输入图像
         OutputArray dst,   //输出图像
         int ddepth,       //输出图像的深度,-1表示使用原图深度,即 src.depth()
         Size ksize,       //内核的大小,Size(w,h)
         Point anchor=Point(-1,-1),    //锚点
         boolnormalize=true,         //一个标识符,表示内核是否被其区域归一化(narmalized)了
         int borderType=BORDER_DEFAULT ) //一般不管    
1 //载入原图  
2 Mat image=imread("2.jpg");  
3 //进行均值滤波操作  
4 Mat out;  
5 boxFilter(image, out, -1,Size(5, 5));  //一般就前面四个参数

 

2、blur函数——均值滤波

 void blur(InputArray src,       //输入图像
      OutputArraydst,       //输出图像
      Size ksize,         //内核大小
      Point anchor=Point(-1,-1),     //锚点
      int borderType=BORDER_DEFAULT ) //一般不管
1 //载入原图  
2   Mat image=imread("1.jpg");  
3   //进行均值滤波操作  
4   Mat out;  
5   blur(image, out, Size(7, 7));    //一般就用前面三个参数

 

 

3、GaussianBlur函数——高斯滤波

void GaussianBlur(InputArray src,      //输入图像
            OutputArray dst,    //输出图像
            Size ksize,       //内核的大小
            double sigmaX,     //高斯核函数在X方向的标准偏差  
            double sigmaY=0,    //高斯核函数在Y方向的标准偏差
            intborderType=BORDER_DEFAULT )  
1 //载入原图  
2 Mat image=imread("1.jpg");  
3 //进行滤波操作  
4 Mat out;  
5 GaussianBlur( image, out, Size( 5, 5 ), 0, 0 );   //一般就用前五个参数

 

4、综合实践:

  1 //******************************【程序说明】*****************************
  2 //    程序名称:线性滤波(方框滤波、均值滤波、高斯滤波)
  3 //    opencv版本:2.4.13
  4 //    日期:2017/9/20
  5 //**********************************************************************
  6 
  7 
  8 //******************************【头文件包含部分】*****************************
  9 //    描述:包含程序所依赖的头文件
 10 //*****************************************************************************
 11 #include <opencv2/core/core.hpp>
 12 #include <opencv2/highgui/highgui.hpp>
 13 #include <opencv2/imgproc/imgproc.hpp>
 14 #include <iostream>
 15 
 16 
 17 //******************************【命名空间声明部分】*****************************
 18 //    描述:包含程序所使用的命名空间
 19 //*****************************************************************************
 20 using namespace std;
 21 using namespace cv;
 22 
 23 
 24 //******************************【全局变量声明部分】*****************************
 25 //    描述:全局变量声明
 26 //*****************************************************************************
 27 Mat g_srcImage,g_dstImage1, g_dstImage2, g_dstImage3;    //存储图片的Mat类型
 28 int g_nBoxFilterValue = 3;    //方框滤波参数值
 29 int g_nMeanBlurValue = 3;    //均值滤波参数值
 30 int g_nGaussianBlurValue = 3;    //高斯滤波参数值
 31 
 32 
 33 //******************************【全局函数声明部分】*****************************
 34 //    描述:全局函数声明
 35 //*****************************************************************************
 36 //轨迹条的回调函数
 37 static void on_BoxFilter(int, void* );        //方框滤波
 38 static void on_MeanBlur(int, void*);    //均值滤波
 39 static void on_GaussianBlur(int, void*);    //高斯滤波
 40 
 41 
 42 //******************************【main()部分】*****************************
 43 //    描述:控制台应用程序的入口函数,我们的程序从这里开始
 44 //*****************************************************************************
 45 int main()
 46 {
 47     //【0】初始化
 48     system("color 5E");
 49 
 50     //【1】读取原图
 51     g_srcImage = imread( "1.jpg", 1 );
 52     if(!g_srcImage.data) { printf("Oh,no,读取srcImage错误!!!!\n"); return false; }
 53 
 54     //【2】克隆原图到三个Mat类型中
 55     g_dstImage1 = g_srcImage.clone();
 56     g_dstImage2 = g_srcImage.clone();
 57     g_dstImage3 = g_srcImage.clone();
 58 
 59     //【3】显示原图
 60     namedWindow("【<0>原图窗口】", 1 );
 61     imshow("【<0>原图窗口】", g_srcImage );
 62 
 63     //【4】滤波操作处理
 64     //***********************【<1>方框滤波】*******************
 65     namedWindow("【<1>方框滤波】", 1);
 66     createTrackbar("内核值:", "【<1>方框滤波】", &g_nBoxFilterValue, 40, on_BoxFilter);
 67     on_BoxFilter(g_nBoxFilterValue, 0);
 68     imshow("【<1>方框滤波】", g_dstImage1);
 69 
 70     //***********************【<2>均值滤波】*******************
 71     namedWindow("【<2>均值滤波】", 1);
 72     createTrackbar("内核值:", "【<2>均值滤波】", &g_nMeanBlurValue, 40, on_MeanBlur);
 73     on_MeanBlur(g_nMeanBlurValue, 0);
 74     imshow("【<2>均值滤波】", g_dstImage2);
 75 
 76     //***********************【<3>高斯滤波】*******************
 77     namedWindow("【<3>高斯滤波】", 1);
 78     createTrackbar("内核值:", "【<3>高斯滤波】", &g_nGaussianBlurValue, 40, on_GaussianBlur);
 79     on_GaussianBlur(g_nGaussianBlurValue, 0);
 80     imshow("【<3>高斯滤波】", g_dstImage3);
 81     
 82     //【5】输出一些有帮助的信息
 83     cout<<endl<<"\t嗯。好了,请调整滚动条观察图像效果~\n\n"
 84                 <<"\t按下“q”键时,程序退出~!\n";
 85 
 86     //【6】按下“q”键时,程序退出
 87     while(char(waitKey(1) != q)){}
 88 
 89     return 0;
 90 }
 91 
 92 
 93 //******************************【on_BoxFilter()部分】*****************************
 94 //    描述:方框滤波操作的回调函数
 95 //*****************************************************************************
 96 static void on_BoxFilter(int, void* )
 97 {
 98     //【1】方框滤波操作
 99     boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue+1, g_nBoxFilterValue+1));
100     //【2】显示出口
101     imshow("【<1>方框滤波】", g_dstImage1);
102 }
103 
104 
105 //******************************【on_MeanBlur()部分】*****************************
106 //    描述:均值滤波操作的回调函数
107 //*****************************************************************************
108 static void on_MeanBlur(int, void*)
109 {
110     //【1】均值滤波操作
111     blur(g_srcImage, g_dstImage2, Size(g_nMeanBlurValue+1, g_nBoxFilterValue+1), Point(-1, -1));
112     //【2】显示出口
113     imshow("【<2>均值滤波】", g_dstImage2);
114 }
115 
116 
117 //******************************【on_GaussianBlur()部分】*****************************
118 //    描述:高斯滤波操作的回调函数
119 //*****************************************************************************
120 static void on_GaussianBlur(int, void*)
121 {
122     //【1】高斯滤波操作
123     GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlurValue*2+1, g_nGaussianBlurValue*2+1), 0, 0);
124     //【2】显示出口
125     imshow("【<3>高斯滤波】", g_dstImage3);
126 }

 

【opencv入门之五】线性滤波(方框滤波、均值滤波、高斯滤波)

标签:orm   存储   大小   roc   显示   enc   回调函数   滚动条   bool   

原文地址:http://www.cnblogs.com/havendblog/p/7565165.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!