在自适应阈值中给出块大小值的基础?

时间:2017-11-18 16:26:25

标签: python opencv image-processing

我并不真正理解在自适应阈值中使用块大小的目的。并且还想知道在哪个基础上将值指定为块大小。 考虑一下代码:

gaussian=cv2.adaptiveThreshold(grayscaledImage,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,115,1)

这里我试图获得灰度图像的自适应高斯阈值。当我将块大小指定为115时,就像上面的代码一样,代码运行良好。

但是,如果,我将块大小指定为114或116,如:

gaussian=cv2.adaptiveThreshold(grayscaledImage,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,116,1)

此代码出错。现在我的主要问题是,我如何理解我应该给出块大小的值?

2 个答案:

答案 0 :(得分:1)

来自文档:

https://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html

  

blockSize - 用于计算a的像素邻域的大小   像素的阈值: 3,5,7等等

一个块以一个像素为中心,所以它必须是一个奇数才能有意义。 3,5,7等等意味着奇数> 1

请阅读文件。他们告诉你如何正确使用东西。

答案 1 :(得分:1)

自适应阈值处理本质上是根据每个像素制作图像,并为这些像素中的每一个计算阈值。块大小决定了这些单个图像的大小,例如这些单个图像中包含多少个相邻像素。

如果我们的块大小为 3。这意味着单个图像区域是一个 3x3 像素阵列,其中感兴趣的像素是该图像的中心。所以其他 8 个像素围绕着这个居中的像素。块大小为 1 只是感兴趣的像素。块大小为 5 创建一个 5x5 像素阵列,再次将像素兴趣放在中心。当您放置偶数时,程序会失败,因为原始像素不是,也不可能是居中的像素。因此,大小为 2 的块会创建一个没有中心的 2x2 像素阵列。这就是导致您出错的原因。