OpenCV中的滤波操作(高斯滤波、双边滤波、均值滤波、中值滤波)

为了方便自己查看,重新包了一层,代码和注释保留在了一起

AllBlur.h

#ifndef ALLBLUR_H
#define ALLBLUR_H
#include "opencv2/opencv.hpp"
#include "opencv2/calib3d.hpp"

using namespace cv;
class AllBlur
{
public:
    AllBlur();
    /**
    * @brief gaussianBlur   高斯滤波
    * @param src   輸入可以為多通道圖,會單獨處理各通道,但是通常使用單通道灰階圖,例如CV_8U或CV_16U。
    * @param dst   输出图
    * @param ksize  模板大小,長寬可以不同,但是都必須為正的奇數。
    * @param sigmaX  x方向的標準差。
    * @param sigmaY  y方向的標準差。
    * @param borderType  推断边缘像素,一般取默认值BORDER_DEFAULT。可省略
    */
   void  gaussianBlur(InputArray src, OutputArray dst, Size ksize,
                 double sigmaX, double sigmaY, int borderType);
   /**
     * @brief BilateralFilter   双边滤波和传统的平滑不同,双边滤波除了使用像素之间的
     * 靠近程度之外还多考虑了像素之间
     * 的光度和色彩上的差异使得双边过滤器能够有效的将杂质去除同时保存图片边缘资讯(耗时较长)
     * @param src   只能处理 CV_8UC1、CV_8UC3、CV_32FC1、CV_32FC3这四种
     * @param dst   输出图会和输入图尺寸、形态相同
     * @param d     过程中各像素会使用到的邻域直径大小
     * @param sigmaColor 为了简化我们让sigmaColor和sigmaSpace的值相同,如果值很小(小於10),
     * 雙邊濾波的效果不明顯,如果值很大(大於150),雙邊濾波效果明顯,這時影像會很像卡通,大的濾波處理速度會很慢,
     * 所以在即時的情況下,建議令d=5,在靜態且有大量的雜訊需要去除時,可以令d=9。
     * @param sigmaSpace
     * @param borderType   推断边缘像素,一般取默认值BORDER_DEFAULT。可省略
     */
    void BilateralFilter(InputArray src, OutputArray dst, int d,
                         double sigmaColor, double sigmaSpace, int borderType);
    /**
     * @brief Blur  (對鄰域內的像素一視同仁,所以有明顯模糊的副作用)均值滤波正如名稱所說,將每個像素替換為相鄰矩形內像素的平均值,以3×3大小的核心來說,
     * 每個像素權重佔1/9,用這些像素的加總,替換當前的像素值,接著用卷積(作用:去噪、增强特征点)對整張影像作處理,由於採用平均濾波,
     * 所以影像變模糊的現象很明顯,且核心越大模糊的後遺症越明顯
     * @param src   輸入可以為多通道圖,會單獨處理各通道,但是通常使用單通道灰階圖,例如CV_8U或CV_16U
     * @param dst   輸出圖會和輸入圖尺寸、型態相同。
     * @param ksize  模板大小,可分別指定長和寬
     * @param anchor  指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点。可省略
     * @param borderType  推断边缘像素,一般取默认值BORDER_DEFAULT。可省略
     */
    void Blur(InputArray src, OutputArray dst, Size ksize, Point anchor, int borderType);
    /**
     * @brief MedianBlur   中值濾波作法為統計排序的濾波器,對於影像某個像素,中值濾波會將濾波範圍內的所有像素排序
     * ,並用中值替換當前的像素值,在椒鹽噪音這種類型的雜訊,中值濾波能夠有效的去除雜訊,且模糊的現象比平均平滑和高斯平滑都來的輕微。
     * @param src          當ksize為3或5時,輸入可以為多通道的CV_8U、CV_16U或CV_32F,在更大的模板時,只能操作CV_8U的型態。
     * @param dst           输出图
     * @param ksize         模板大小,可分別指定長和寬
     */

    void MedianBlur(InputArray src, OutputArray dst, int ksize);
};

#endif // ALLBLUR_H

 

AllBlur.cpp

#include "AllBlur.h"

AllBlur::AllBlur()
{

}

void AllBlur::gaussianBlur(InputArray src, OutputArray dst, Size ksize,
                      double sigmaX, double sigmaY, int borderType)
{
    GaussianBlur(src,dst,ksize,sigmaX,sigmaY,BORDER_DEFAULT);
}

void AllBlur::BilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType)
{
    bilateralFilter(src,dst,d,sigmaColor,sigmaSpace,BORDER_DEFAULT);
}

void AllBlur::Blur(InputArray src, OutputArray dst, Size ksize, Point anchor, int borderType)
{
    blur( src,  dst,  ksize,  anchor,  BORDER_DEFAULT);

}

void AllBlur::MedianBlur(InputArray src, OutputArray dst, int ksize)
{
     medianBlur( src,  dst,  ksize);
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落寞的雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值