mu_tou_man

导航

 

  在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上进行库的导入,函数经过亲测,可行。

posted on 2014-03-31 16:58  mu_tou_man  阅读(2922)  评论(0编辑  收藏  举报