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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM