C++实现高斯滤波器

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

转载于:https://www.cnblogs.com/mu-tou-man/p/3636147.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值