首页 > 解决方案 > 如何更改 OpenCv 中高斯自适应阈值的权重?

问题描述

据我了解,在自适应阈值中,当我们使用 时cv.ADAPTIVE_THRESH_MEAN_C,它计算块中像素值的平均值,即阈值,当我们使用时cv.ADAPTIVE_THRESH_GAUSSIAN_C,计算加权平均值。但是我如何查看或更改用于计算加权平均值的权重?

标签: pythonopencvimage-processing

解决方案


您可以使用cv2.getGaussianKernel()来查看分配给您的功能的权重。

`cv2.get GaussianKernel() 接受 3 个参数:

  1. kernel_size : 内核大小(必须是奇数)
  2. sigma:使用的高斯窗口的标准偏差。通过以下公式计算:0.3*((kernel_size-1)*0.5 - 1) + 0.8
  3. type : 系数的类型(要么float32要么float64

此页面上提供了此方法的详细信息

例子:

考虑以下作为 的设置cv2.adaptiveThreshold()

th3 = cv2.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,\
        cv.THRESH_BINARY,11,2)

这里的内核大小是11。你可以得到对应的权重如上所说:

cv2.getGaussianKernel(11, 2)

它返回一个中心位置具有最高值的数组:

array([[ 0.00881223],
       [ 0.02714358],
       [ 0.06511406],
       [ 0.12164907],
       [ 0.17699836],
       [ 0.20056541],
       [ 0.17699836],
       [ 0.12164907],
       [ 0.06511406],
       [ 0.02714358],
       [ 0.00881223]])

可以通过改变sigma值来更改权重,该值是 中的第二个参数cv2.getGaussianKernel()

cv2.getGaussianKernel(11, 3)

返回以下权重:

array([[ 0.03548293],
       [ 0.05850147],
       [ 0.08630959],
       [ 0.1139453 ],
       [ 0.13461047],
       [ 0.14230046],
       [ 0.13461047],
       [ 0.1139453 ],
       [ 0.08630959],
       [ 0.05850147],
       [ 0.03548293]])

推荐阅读