zoukankan      html  css  js  c++  java
  • 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上进行库的导入,函数经过亲测,可行。

  • 相关阅读:
    POJ 1044: Date bugs
    POJ 1017: Packets
    POJ 1014: Dividing
    POJ 1012: Joseph
    POJ 1011: Sticks
    POJ 1008: Maya Calendar
    POJ 1005: I Think I Need a Houseboat
    为什么要自动化测试
    微软CodeDom模型学习笔记(全)
    概念完整性
  • 原文地址:https://www.cnblogs.com/mu-tou-man/p/3636147.html
Copyright © 2011-2022 走看看