为了方便自己查看,重新包了一层,代码和注释保留在了一起
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);
}