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 std;
using namespace cv;
// 定义高斯滤波函数
void myfilter(int filter_size,Mat& img_input,Mat& img_output);
int main(){
Mat img,img_gray,img_out,img_out2;
img = imread("/home/v/home.png");
if (img.empty()){
cout<<"can't open the 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;
GaussianBlur(img_gray,img_out,Size(a,a),2,2);
imshow("GaussianBlur",img_out);
// 自定义高斯滤波
myfilter(a,img_gray,img_out2);
imshow("myfilter",img_out2);
waitKey(0);
return 0;
}
void myfilter(int filter_size,Mat& img_input,Mat& img_output){
img_output = img_input.clone();
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++){
double sum = 0.0;
double sum1 = 0.0;
double sigma = 7;
double g;
for (int m = -k; m <= k; m++){
for (int n = -k; n <= k; n++){
g = exp(-(m*m+n*n)/(2*sigma*sigma));
sum += g*img_input.at<uchar>(i+m,j+n);
sum1 += g;
}
}
img_output.at<uchar>(i,j) = (int)(sum/sum1);
}
}
}