opencv的几种滤波算子

来源:互联网 发布:全民枪战挂机软件 编辑:程序博客网 时间:2024/04/29 23:19

1、 模糊函数blur滤波

//! a synonym for normalized box filter
CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
                        Size ksize, Point anchor=Point(-1,-1),
                        int borderType=BORDER_DEFAULT );

参数说明:

InputArray 表示输入图像Mat类型src,

OutputArray表示输出图像Mat类型dst,

Size表示卷积核大小,此参数决定模糊程度,Size(x,y)其中x,y取值越大,表示模糊程度越深,而且x,y表示为奇数。

Point 表示锚定的位置,也就是卷积核替换重叠像素中的哪个位置,此参数一般使用Point(-1,-1)表示使用卷积核的中心位置。

Type表示对边缘的处理方法,一般默认为4,

  Mat src,dst;
 src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
 cvtColor(src, src, CV_BGR2GRAY);
 namedWindow("src", WINDOW_NORMAL);
 imshow("src", src);
 
 blur(src, dst, Size(5, 5), Point(-1, -1), 4);
 namedWindow("dst", WINDOW_NORMAL);
imshow("dst", dst);
 waitKey(0);
 return;

测试图片如下

 
 src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
 blur(src, dst, Size(30, 1), Point(-1, -1), 4);//X方向模糊,

  src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
  blur(src, dst, Size(1, 30), Point(-1, -1), 4);//Y方向模糊,

2、高斯模糊函数GaussianBlur

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

参数说明:SigmaX表示高斯方程中的X方向标准方差,

SigmaY表示高斯方程中的Y方向标准方差,

Type一般为默认值4;

Size表示高斯卷积核,必须是正奇数,SigmaX在当Size大小不为0 的时候从size大小计算,SigmaY在SigmaX不为零的时候从X计算、SigmaX为零的时候从Size大小中计算。

 src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);

 GaussianBlur(src, dst, Size(5, 5), 0, 0, 4);


3、中值滤波

src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);

medianblur(src,dst,5);

4、双边模糊函数bilateralFilter

//! smooths the image using bilateral filter
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
                                   double sigmaColor, double sigmaSpace,
                                   int borderType=BORDER_DEFAULT );

d表示双边滤波时候中心到周边像素的距离,

sigmacolor表示高斯核中颜色值标准方差

sigmaspace表示高斯核中空间的标准方差

Type一般为默认值4;

src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);

bilaterlFilter(src,dst,15,120,10,4);


5、滤波函数filter2D

CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,
                            InputArray kernel, Point anchor=Point(-1,-1),
                            double delta=0, int borderType=BORDER_DEFAULT );

d表示输出图像的深度,-1表示跟输入图像深度相同

kernel表示自定义的Mat对象,卷积核或者算子,

Point表示锚定的位置。默认为Point(-1,-1);

delta表示卷积处理之后的每个像素是否加上常量delta,一般默认为0;

Type一般为默认值4;

//图像的模糊

 int ksize = 15;
 Mat kernel = Mat::ones(ksize, ksize, CV_32F) / (float)(ksize*ksize);
 filter2D(src, dst, -1, kernel, Point(-1, -1), 0.0, 4);

//图像的边缘提取

 Mat kernel1 = (Mat_<char>(3, 3) << -1, -1, -1, -1, 8,-1, -1, -1, -1);
 filter2D(src, dst, -1, kernel1, Point(-1, -1), 0.0, 4);


//图像的锐化

 Mat kernel1 = (Mat_<char>(3, 3) << -1, -1, -1, -1, 9,-1, -1, -1, -1);
 filter2D(src, dst, -1, kernel1, Point(-1, -1), 0.0, 4);


//robot算子

 Mat kernel1 = (Mat_<char>(2, 2) << -1,0,0,1);
 filter2D(src, dst, -1, kernel1, Point(-1, -1), 0.0, 4);


//sobel算子

  Mat kernel1 = (Mat_<char>(3,3) << 1,2,1,0,0,0,-1,-2,-1);
 filter2D(src, dst, -1, kernel1, Point(-1, -1), 0.0, 4);


0 0
原创粉丝点击