opencv学习之路(12)、图像滤波

一、图像滤波简介

二、方框滤波——boxFilter()

 1 #include<opencv2/opencv.hpp>
 2 using namespace cv;
 3 
 4 void main(){
 5     Mat src=imread("E://1.jpg");
 6     Mat dst;
 7     //方框滤波器,-1代表原图像深度,size内核大小,true按权重相加(此时等于均值滤波),false按原像素相加(所以很多像素点都大于了255,如上图所示)
 8     boxFilter(src,dst,-1,Size(3,3),Point(-1,-1),true);
 9     imshow("src",src);
10     imshow("dst",dst);
11     waitKey(0);
12 }

三、均值滤波——blur()

 

四、高斯滤波——GaussianBlur()

 

以上是线性滤波(方框,均值,高斯)


以下是非线性滤波(中值,双边)

五、中值滤波——medianBlur(有效去除脉冲噪声和椒盐噪声)

六、双边滤波——bilateralFilter()

 1 #include<opencv2/opencv.hpp>
 2 using namespace cv;
 3 
 4 void main(){
 5     Mat src=imread("E://1.jpg");
 6     Mat dst;
 7 
 8     //boxFilter(src,dst,-1,Size(3,3),Point(-1,-1),true);//方框滤波器
 9     //blur(src,dst,Size(5,5));//均值滤波
10     //GaussianBlur(src,dst,Size(5,5),1);//高斯滤波
11     //medianBlur(src,dst,5);//中值滤波
12     bilateralFilter(src,dst,5,10.0,2.0);//双边滤波
13 
14     imshow("src",src);
15     imshow("dst",dst);
16     waitKey(0);
17 }

七、滑动条调整内核大小

 1 #include<opencv2/opencv.hpp>
 2 using namespace cv;
 3 Mat dst;
 4 int value=21;
 5 
 6 void onChange(int,void* param){
 7     Mat src=*(Mat *)param;
 8     if(value%2==0){
 9         medianBlur(src,dst,value-1);//中值滤波的第三个参数为奇数
10     }
11     else
12     {
13         medianBlur(src,dst,value);
14     }
15     imshow("windows",dst);
16 }
17 
18 void main(){
19     Mat src=imread("E://1.jpg");
20     namedWindow("windows",CV_WINDOW_AUTOSIZE);
21     createTrackbar("滑动条","windows",&value,99,onChange,&src);//最后一个参数若设置为0,移动滑动条时会报错
22     medianBlur(src,dst,21);
23     imshow("windows",dst);
24     waitKey(0);
25 }

原文地址:https://www.cnblogs.com/little-monkey/p/7222454.html