当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python OpenCV getgaussiankernel()用法及代码示例


Python OpenCV getGaussianKernel() 函数用于查找高斯滤波器系数。高斯核也用于高斯模糊。高斯模糊是一种使用低通滤波器的平滑技术,其权重来自高斯函数。事实上,这是 CV(计算机视觉)应用中使用最广泛的低通滤波器。高斯滤波器的不同特性使算法更加高效。

用法:cv.getGaussianKernel(ksize, sigma[, ktype])

参数

  • Ksize:是光圈大小。 Ksize 值应该是奇数和正数。
  • sigma:Sigma 是高斯标准差。如果它是非正数,它从 ksize 计算为 sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8。
  • ktype:滤波器系数的类型。它可以是 CV_32F 或 CV_64F。

返回值:



高斯滤波器系数矩阵。

getGaussianKernel() 函数计算并返回维度为 ksize×1 的高斯滤波器系数矩阵:

Gi=α∗e−(i−(ksize−1)/2)2/(2∗sigma2)

其中 i=0 到 ksize−1,α 是选择的比例因子,因此 ∑iGi=1。

可以将两个这样的生成内核传递给 sepFilter2D。这些传递的函数会自动识别平滑内核(权重总和等于 1 的对称内核)并相应地处理它们。您也可以使用 higher-level GaussianBlur。在这里,要记住的一件事是,作为孔径大小的 k 也应该是奇数和正数。

所以,你可能会有一个问题,什么是高斯核,我们为什么需要它?高斯核是线性可分的。这意味着我们可以将任何二维过滤器分解为两个一维过滤器。正因为如此,计算复杂度从 O(n2) 到 O(n)。什么时间在计算机科学中很重要。

应用多个连续的高斯核与应用单个更大的高斯模糊相同,其半径等于多个核半径平方和的平方根。使用这个特性,我们可以通过多个可分离过滤器的混合来近似一个不可分离过滤器。使用帕斯卡三角形可以快速获得高斯核权重(1-D)。

范例1:

在这里,在下面的示例中,我们将找到一张图像的高斯核。我们首先使用 cv2 读取图像。然后我们使用 getgaussiankernel() 函数创建大小为 3×1 的高斯核。孔径大小的 ksize 是奇数和正数。



本例中使用了下图:

Python3


# Python OpenCV - getgaussiankernel() Function
  
# import cv2
import cv2
  
# read image
img = cv2.imread('gfg2.jpg')
  
# Creates a 1-D Gaussian kernel
a = cv2.getGaussianKernel(3, 1)
  
# print Gaussian filter coefficients matrix
print(a)

输出:

[[0.27406862]
 [0.45186276]
 [0.27406862]]

范例2:

在这个例子中,我们将找到一张图像的高斯核,我们使用 getgaussiankernel() 函数创建大小为 7×1 的高斯核。

Python3


# Python OpenCV - getgaussiankernel() Function
  
# import cv2
import cv2
  
# read image
img = cv2.imread('gfg_logo.png')
  
# Creates a 1-D Gaussian kernel
a = cv2.getGaussianKernel(7, 1)
  
# print Gaussian filter coefficients matrix
print(a)

输出:

[[0.00443305]
 [0.05400558]
 [0.24203623]
 [0.39905028]
 [0.24203623]
 [0.05400558]
 [0.00443305]]



相关用法


注:本文由纯净天空筛选整理自rushi_javiya大神的英文原创作品 Python OpenCV – getgaussiankernel() Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。