- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
功能描述
cv::getGaussianKernel() 是 OpenCV 中的一个函数,用于生成一维高斯核。这种核通常用于实现高斯模糊滤波器,该滤波器可以平滑图像并减少噪声。高斯模糊是一种非常常用的图像处理技术,在许多计算机视觉任务中都有应用,比如边缘检测前的预处理。
函数返回高斯滤波器系数。
该函数计算并返回一个 ksize×1 的高斯滤波器系数矩阵:
  
      
       
        
         
         
           G 
          
         
           i 
          
         
        
          = 
         
        
          α 
         
        
          ∗ 
         
         
         
           e 
          
          
          
            − 
           
          
            ( 
           
          
            i 
           
          
            − 
           
          
            ( 
           
          
            ksize 
           
          
            − 
           
          
            1 
           
          
            ) 
           
          
            / 
           
          
            2 
           
           
           
             ) 
            
           
             2 
            
           
          
            / 
           
          
            ( 
           
          
            2 
           
          
            ∗ 
           
           
           
             sigma 
            
           
             2 
            
           
          
            ) 
           
          
         
        
          , 
         
        
       
         G_i= \alpha *e^{-(i-( \texttt{ksize} -1)/2)^2/(2* \texttt{sigma}^2)}, 
        
       
     Gi=α∗e−(i−(ksize−1)/2)2/(2∗sigma2),
 其中,i=0…ksize−1 并且 而 α 是缩放因子,选择该因子是为了使得  
     
      
       
        
        
          ∑ 
         
        
          i 
         
        
        
        
          G 
         
        
          i 
         
        
       
         = 
        
       
         1 
        
       
      
        \sum_i G_i=1 
       
      
    ∑iGi=1。
生成的两个这样的核可以传递给 sepFilter2D。这些函数自动识别平滑核(一个对称核,其权重之和等于 1),并相应地处理它们。您也可以使用更高层次的 GaussianBlur。
函数原型
Mat cv::getGaussianKernel
(
	int 	ksize,
	double 	sigma,
	int 	ktype = CV_64F 
)		
参数
- 参数ksize 孔径大小。它应该是奇数 (ksizemod2=1) 并且为正数。
- 参数sigma 高斯标准差。如果它是非正数,它将根据 ksize 计算为 sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8。
- 参数ktype 滤波器系数的类型。它可以是 CV_32F 或 CV_64F。
代码示例
include <opencv2/opencv.hpp>
#include <iostream>
int main(int argc, char** argv)
{
    // 读取图像
    cv::Mat src = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_GRAYSCALE);
    if (src.empty())
    {
        std::cout << "Error: Image cannot be loaded!" << std::endl;
        return -1;
    }
    cv::Size sz2Sh( 400, 600 );
    cv::resize( src, src, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );
    // 获取高斯核
    int ksize = 5;     // 孔径大小
    double sigma = 3.0;// 标准差
    cv::Mat kernel = cv::getGaussianKernel(ksize, sigma, CV_64F);
    // 创建二维高斯核
    cv::Mat kernel2D = kernel * kernel.t();
    // 应用高斯核
    cv::Mat filtered;
    cv::filter2D(src, filtered, -1, kernel2D);
    // 显示图像
    cv::namedWindow("Original Image", cv::WINDOW_NORMAL);
    cv::imshow("Original Image", src);
    cv::namedWindow("Filtered Image", cv::WINDOW_NORMAL);
    cv::imshow("Filtered Image", filtered);
    cv::waitKey(0);
    return 0;
}
运行结果










![[论文阅读]Mobility-Aware Cooperative Caching in VEC Based on CAFR](https://i-blog.csdnimg.cn/direct/82d8431bcbcc4e68928f79299e9a52e8.png)


![[极客大挑战 2019]FinalSQL1](https://i-blog.csdnimg.cn/direct/b52071dd7c9a48a8a80d2dd7a68a745e.png)






