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  阅读(2659)  评论(0编辑  收藏  举报

分类:

技术点:

相关文章:

  • 2021-10-05
  • 2021-12-23
  • 2021-07-27
  • 2022-02-26
  • 2022-01-02
  • 2021-08-18
  • 2021-12-04
  • 2021-07-08
猜你喜欢
  • 2021-12-30
  • 2022-01-01
  • 2022-01-17
  • 2022-03-14
  • 2022-01-02
  • 2022-02-10
  • 2021-08-19
相关资源
相似解决方案