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 }