在matlab中,我们经常用到高斯滤波器,生成滤波器一般都是这样的函数psf = fspecial('gauss', GaussSize, sigma),但是在vs2010中用到的高斯滤波器不能自己直接定义一个滤波器,所以我就用c++与OPENCV的mat类实现了高斯滤波器,具体代码如下:
#include"opencv24.h"
using namespace std;
Mat MakeGaussFilt(int GauSize, double Sigma)
{
double siz = (GauSize-1.0)/2;
Mat x = Mat(GauSize,GauSize,CV_64F);
Mat y = Mat(GauSize,GauSize,CV_64F);
for (int i=0;i<GauSize;i++)
{
x.col(i)=double(i-siz);
y.row(i)=double(i-siz);
}
Mat argu = Mat(GauSize,GauSize,CV_64F);
Mat x2=x.mul(x);
Mat y2=y.mul(y);
argu = -(x2+y2)/(2*Sigma*Sigma);
Mat h = Mat(GauSize,GauSize,CV_64F);
exp(argu,h);
Scalar sumh=sum(h);
double summ=sumh.val[0];
h=h/summ;
return h;
}
其中Mat类用到了OPENCV库,自己要在VS上进行库的导入,函数经过亲测,可行。