如何在OpenCv中更改高斯自适应阈值的权重?

时间:2018-07-21 14:51:56

标签: python opencv image-processing

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

1 个答案:

答案 0 :(得分:0)

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

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

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

此方法的详细信息在this page

示例:

将以下内容设为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]])