opencv学习笔记(四)----滤波操作

线性滤波

方框滤波——boxFilter

模糊图片

void boxFilter(
    InputArray src,  //输入图像
    OutputArray dst,   //输出图像
    int ddepth,   //图像深度,-1指原图深度
    Size ksize,    //卷积核大小   如Size(3,3)
    Point anchor=Point(-1,-1),   //瞄点(被平滑的那个点)
    boolnormalize=true,  //内核是否进行归一化
    int borderType=BORDER_DEFAULT  //边界模式,一般不管
)

均值滤波——blur

图像去噪,同时破坏了图像的细节部分

void blur(
    InputArray src,  //输入图像
    OutputArraydst,  //输出图像
    Size ksize,   //卷积核
    Point anchor=Point(-1,-1), //瞄点 
    int borderType=BORDER_DEFAULT   //边界类型
) 

高斯滤波——GaussianBlur

消除高斯噪声,减噪

void GaussianBlur(
    InputArray src, //输入图像
    OutputArray dst,   //输出图像
    Size ksize,  //卷积核大小
    double sigmaX,   //高斯核函数在X方向的的标准偏差  (建议给值)
    double sigmaY=0,   //高斯核函数在Y方向的的标准偏差  (建议给值)
    intborderType=BORDER_DEFAULT   //边界类型
)

代码示例

boxFilter(img, outBox, -1,Size(5, 5));
blur(img, outBlur, Size(7, 7));
GaussianBlur( img, outGaussian, Size( 5, 5 ), 0, 0 );

非线性滤波

中值滤波——medianBlur

去除脉冲噪声、椒盐噪声的同时能保留图像边缘细节 

void medianBlur(
    InputArray src,  //输入
    OutputArray dst,   //输出
    int ksize  //核大小
)  

双边滤波——

保持边缘、降噪平滑

void bilateralFilter(
    InputArray src, //输入
    OutputArray dst,   //输出
    int d,  //每个像素邻域直径
    double sigmaColor, //颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域
    double sigmaSpace,  //Space坐标空间中滤波器的sigma值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当d>0,d指定了邻域大小且与sigmaSpace无关。否则,d正比于sigmaSpace。
    int borderType=BORDER_DEFAULT  //边界模式
)  

代码示例

medianBlur( img, outMedian, 7);
bilateralFilter( img, outBilateral, 25, 25*2, 25/2 );

猜你喜欢

转载自blog.csdn.net/zyhhhh233/article/details/80421457
今日推荐