目录
图像平滑滤波:抑制或消除图像中存在的噪声的方法。对图像的低频分量增强,同时削弱高频分量。
1.2D卷积
filter2D(输入, 输出, 输出图像depth(), kernel);
详情:https://blog.csdn.net/keith_bb/article/details/53103026
2.均值滤波
void boxFilter( InputArray src, OutputArray dst, int ddepth, Size ksize,
Point anchor, bool normalize=true, int borderType=4)
类似地
void blur(...)
通过将图像与归一化框滤镜进行卷积来完成的。它仅获取内核区域下所有像素的平均值,并替换中心元素。
3.高斯滤波
void GaussianBlur(InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY=0,
int borderType=BORDER_DEFAULT);
getGaussianKernel()//创建高斯内核
src,输入图像,即源图像,填Mat类的对象即可。它可以是单独的任意通道数的图片,但需要注意,图片深度应该为CV_8U,CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
dst,即目标图像,需要和源图片有一样的尺寸和类型。
ksize,高斯内核的大小。其中ksize.width和ksize.height可以不同,但他们都必须为正数和奇数.或者,它们可以是零的,它们都是由sigma计算而来。
sigmaX,表示高斯核函数在X方向的的标准偏差。
sigmaY,表示高斯核函数在Y方向的的标准偏差。
如果仅指定sigmaX,则将sigmaY与sigmaX相同。如果两个都为零,则根据内核大小进行计算。高斯模糊对于从图像中去除高斯噪声非常有效。
4.中值滤波
medianBlur(InputArray src, OutArray dst, int ksize);
5.双边滤波
双边滤波器在空间中也采用高斯滤波器,但是又有一个高斯滤波器,它是像素差的函数。空间的高斯函数确保仅考虑附近像素的模糊,而强度差的高斯函数确保仅考虑强度与中心像素相似的那些像素的模糊。由于边缘的像素强度变化较大,因此可以保留边缘。
void bilateralFilter(InputArray src, OutputArray dst, int d,
double sigmaColor, double sigmaSpace,
int borderType=4)
src,输入图像,需要是8位或者浮点型单通道、三通道的图像。
dst,需要与输入图像有一样的尺寸和类型。
d,表示在滤波过程中每个像素邻域的直径。如果这个值设为非正数,则从第五个参数sigmaSpace来计算它。
sigmaColor,颜色空间滤波器的sigma值。这个值越大,表示该像素邻域内有越宽广的颜色被混合到一起,会产生较大的半相等颜色区域。
sigmaSpace,坐标空间中滤波器的sigma值,坐标空间的标准方差。它的值越大,则越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace无关。
borderType。
代码
#include<opencv2/opencv.hpp>
#include<iostream>
#include<imgproc.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat image = imread("C:/Users/YY/Pictures/Saved Pictures/lenna.jpg");
Mat out;
Mat k;
bilateralFilter(image, out, 5, 200,200);
//medianBlur(image, out, 3);
//GaussianBlur(image, out, Size(3, 3), 0.5);
//boxFilter(image, out, -1, Size(3, 3));
imshow("显示", out);
imshow("原图", image);
out = image - out;
imshow("差异", out);
waitKey(0);
destroyAllWindows();
return 0;
}