//高斯滤波器实现
void gausBlur(cv::Mat srcImage, cv::Mat dstImage, int ksize, double sigma){
const double PI = 4.0 / (atan(1.0));
//定义卷积核大小
double **tempMatrix = new doublle*[ksize];
for(int i = 0; i < ksize; ++i){
tempMatrix [i] = new double[ksize];
}
//生成高斯滤波模板
int center = ksize / 2;
int sum = 0;
for(int i = 0; i < ksize; ++i){
for(int j = 0; j < ksize; ++j){
tempMatrix[i][j] = (1 / (2 * PI * sigma * sigma))
* (-((i - center)*(i - center) + (j - center) * (j - center)) / (2 * sigma *sigma)) ;
sum += gaus[i][j];
}
}
for(int i = 0; i < ksize; ++i){
for(int j = 0; j < ksize; ++j){
tempMatrix[i][j] /= sum;
}
}
//将高斯滤波模板用于图像
//边界扩充
copyMakeBorder(srcImage,dstImage, center, center, center, center, BorderTypes::BORDER_REFLECT);
int rows = dstImage.rows - center;
int cols = dstImage.cols - center;
for(int i = 0; i < rows; ++i){
for(int j = 0; j < cols; ++j){
double s = 0;
for(int p = -center; p < center; ++p){
for(int q = -center; q < center; ++q){
s += tempMatrix[i][j] * dstImage.at<uchar>(i + p, j + q);
}
}
dstImage.at<uchar>(i,j) = static_cast<uchar>(s);
}
}
}