本文主要是介绍【c++|opencv】二、灰度变换和空间滤波---5.中值滤波,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog
0. 前言
1. 中值滤波
#include<iostream>
#include<opencv2/opencv.hpp>
#include"Salt.h"using namespace cv;
using namespace std;void myfilter(int filter_size,Mat& img_input,Mat& img_output);
int mysort(Mat& sortarray,int filter_size);int main(){Mat img,img_gray,img_output,img_output2;img = imread("/home/v/home.png");if (img.empty()){cout<<"could not load image"<<endl;return -1;}imshow("img",img);cvtColor(img,img_gray,COLOR_BGR2GRAY);Salt(img_gray,1000);imshow("img gray",img_gray);//OpenCV自带滤波器int a=7;medianBlur(img_gray,img_output,a);imshow("medianBlur",img_output);// 自编函数myfilter(a,img_gray,img_output2);imshow("myfilter",img_output2);waitKey(0);return 0;
}void myfilter(int filter_size,Mat& img_input,Mat& img_output){img_output = img_input.clone();Mat sortarray(1,filter_size*filter_size,CV_8U);int k = (filter_size-1)/2;for (int i=k;i<img_input.rows-k;i++){for (int j=k;j<img_input.cols-k;j++){int h = 0;for (int m=-k;m<=k;m++){for (int n=-k;n<=k;n++){sortarray.at<uchar>(h) = img_input.at<uchar>(i+m,j+n);h++;}}img_output.at<uchar>(i,j) = mysort(sortarray,filter_size*filter_size);}}
}// 找中值
int mysort(Mat& sortarray,int filter_size){int exchange;int m;for (int i=1;i<=filter_size-1;i++){for (int j=1;j<filter_size-1;j++){if (sortarray.at<uchar>(j-1) > sortarray.at<uchar>(j)){exchange = sortarray.at<uchar>(j-1);sortarray.at<uchar>(j-1) = sortarray.at<uchar>(j);sortarray.at<uchar>(j) = exchange;}}}return sortarray.at<uchar>((filter_size+1)/2);
}
这篇关于【c++|opencv】二、灰度变换和空间滤波---5.中值滤波的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!