一、均值滤波。

1.取3*3的模板,取覆盖像素的平均值。(需要赋值,所以选取奇数的模板,方便找中间的像素点)

2.将平均值,赋值给3*3模板的中间的像素值。(需要设计滑动窗口,依次遍历并赋值)

3.处理后边界的像素值不变。

 1 #include<opencv2\opencv.hpp>
 2 #include<iostream>
 3
 4 using namespace cv;
 5 using namespace std;
 6
 7 int main()
 8 {
 9     Mat image=imread("E:/photo/17.jpg",0);
10     imshow("photo",image);
11     int r=image.rows;
12     int c=image.cols;
13     Mat image1(r, c, CV_8UC1, Scalar(0));   // 定义空图像
14     for(int i=1;i<r-1;i++)
15     {
16         for(int j=1;j<c-1;j++)
17         {
18             uchar S[121];
19             int t=0;
20             for(int k=i-1;k<i+2;k++)
21           {
22                 for(int l=j-1;l<j+2;l++)
23                 {
24                     S[t]=image.at<uchar>(k,l);
25                     t++;
26                     //cout<<S[t]<<",,,";
27
28                 }
29
30                         for (t=0; t<9;t++)
31                         {
32                             if(S[t]>S[t+1])
33                             {
34                                 int temp=0;
35                                 temp = S[t];
36                                 S[t] = S[t+1];
37                                 S[t+1] = temp;
38                                 image1.at<uchar>(i,j)=S[4];
39                             }
40                          }
41             }
42
43             }
44    }
45    imshow("Laterphoto",image1);
46    waitKey(0);
47    return 0;
48 }

二、中值滤波。

原理同上,均值是求平均值进行赋值,中值是找到像素点的中间的像素值进行赋值,需要进行排序。

 1 #include<opencv2\opencv.hpp>
 2 #include<iostream>
 3 using namespace cv;
 4 using namespace std;
 5 int main()
 6 {
 7     Mat image=imread("E:/photo/1.jpg",0);
 8     imshow("photo",image);
 9     int r=image.rows;
10     int c=image.cols;
11     int sum=0;
12     int s;
13     Mat image1(r, c, CV_8UC1, Scalar(0));   // 定义空图像
14     for(int i=1;i<r-1;i++)
15     {
16         for(int j=1;j<c-1;j++)
17             {
18             sum=0;
19             for(int k=i-1;k<i+2;k++)
20                 {
21                 for(int l=j-1;l<j+2;l++)
22                     {
23                         sum+=image.at<uchar>(k,l);
24                         //cout<<sum<<",,";
25                         s=cvRound(sum/9);
26                     }
27                 }
28
29             //cout<<s<<",,";
30             image1.at<uchar>(i-1,j-1)=s;
31             }
32     }
33    imshow("Laterphoto",image1);
34    waitKey(0);
35 }
02-09 05:25