学习opencv之各种基本平滑处理

来源:互联网 发布:域名的好处 编辑:程序博客网 时间:2024/06/05 11:38

归一化块滤波器:  

        输出像素值是核窗口内像素值的均值 ( 所有像素加权系数相等)

        blur(src, dst, ksize, anchor, borderType)  

         src: 输入图像
         dst: 输出图像
         Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)
         Point(-1, -1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点,如果是缺省也是这个

高斯滤波器:

          void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT ) ;

          src和dst当然分别是输入图像和输出图像
          Ksize为高斯滤波器模板大小
          sigmaX和sigmaY分别为高斯滤波在横向和竖向的滤波系数
          borderType为边缘扩展点插值类型

中值滤波器:

           medianBlur(InputArray src, OutputArray dst, int ksize)

           src和dst当然分别是输入图像和输出图像

           Ksize为中值滤波器模板大小

双边滤波器:

           双边滤波器会依据每个像素及其领域构造一个加权平均值,加权计算包括两部分,
           其中第一部分加权方式与高斯平滑中的相同,
           第二部分也属于高斯加权,但不是基于中心像素与其他像素的空间距离之上的加权,而是基于其他像素与中心像素的亮度差值的加权。
           可以将高斯模糊视为高斯平滑,对相似的像素赋予较高的权重,不相似的像素赋予较小的权重。

           bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace,int borderType=BORDER_DEFAULT )

           src和dst当然分别是输入图像和输出图像。
          d为每个像素领域的直径,
          sigmaColor为颜色空间的标准偏差,
          sigmaSpace为坐标空间的标准偏差。
          borderType为边缘点插值类型。

代码演示如下:

// 1.1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include"opencv243.h"using namespace std;using namespace cv;Mat dst;//归一化块滤波器void blurs(Mat image){blur(image,dst,Size(5,5));}//高斯滤波void Gblur(Mat image){GaussianBlur(image,dst,Size(5,5),0,0);}//中值滤波器void Mblur(Mat image){medianBlur(image,dst,5);}//双边滤波void Bblur(Mat image){bilateralFilter(image,dst,10,40,150);}int _tmain(int argc, _TCHAR* argv[]){Mat image=imread("C:\\Users\\sony\\Desktop\\Lena.jpg");if(image.empty()) return -1;/*blurs(image);imshow("Normalized Box Filter",dst);*//*Gblur(image);imshow("Gaussian filter",dst);*//*Mblur(image);imshow("Median Filter",dst);*/Bblur(image);imshow("Bilteral Filter",dst);waitKey(0);return 0;}