自己实现中值滤波

来源:互联网 发布:朋友圈视频制作软件 编辑:程序博客网 时间:2024/05/18 11:12

自己实现中值滤波

中值滤波代码
#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;
void median_Filter (Mat &src,Mat &dst)  {      dst=src.clone();    uchar* p_data=dst.data;    // 原图数据区指针    int nLineByte =dst.cols;    // 图像每行像素所占的字节数    int width =dst.cols;       // 图像的宽度    int height =dst.rows;       // 图像的高度    for (int j=1;j<height-1;j++)    //行   {          for (int i=1;i<width-1;i++) //宽         {             int k = 0;              uchar window[9];        //定义3*3大小窗的数组            for (int y = j - 1; y < j + 2; ++y)                  for (int x = i - 1; x < i + 2; ++x)                     window[k++] = p_data[y * width + x];              
//排序            for (int m = 0; m < 5; ++m)             {                  int min = m;                  for (int n = m + 1; n < 9; ++n)                      if (window[n] < window[min])                        min = n;                  //Put found minimum element in its place                  uchar temp = window[m];                 window[m] = window[min];                  window[min] = temp;             }             p_data[ j*width+i ] = window[4];  //将中值赋给变换后的图像        }      }  }  int main(){     Mat src=imread("E:\\图库\\lena.bmp",0);namedWindow("原图");moveWindow("原图",60,60);imshow("原图",src);Mat dst;median_Filter (src,dst);namedWindow("效果图");moveWindow("效果图",320,320);imshow("效果图",dst);waitKey(0);return 0;}
运行结果
       
0 0