本文主要借鉴参考了这篇已总结得很好的博文:zddhub 高斯模糊实现小结 ,感谢博主zddhub的精彩总结,记录此文仅供自己学习总结。
以下是VS2013 下C++实现简要代码,借助OpenCV为了更方便读取、显示图像。只是个一维高斯的简单Demo,用以测试效果。
#include <highgui.h>
#include <cv.h>
using namespace cv;
void main()
{
Mat src = imread("demo.bmp",2);
int dd = src.channels();
Mat dst,middle;// middle存放中间数据
dst.create(src.size(), src.type());
middle.create(src.size(), src.type());
int width = src.cols;
int height = src.rows;
//////////////////////////////////////////////////////////////////////////
// 一维高斯模糊
double sigma = 6;
const double PI = 3.141592653;
int ksize = ceil(sigma * 3) * 2 + 1; // 使边长为奇数
int kcenter = ksize / 2;
if (ksize == 1)
{
src.copyTo(dst);
return;
}
double *kernel = new double[ksize];
double temp = -1 / (2 *