【Opencv–adaptiveThreshold】自适应阈值图像二值化

文章目录

【Opencv--adaptiveThreshold】自适应阈值图像二值化1. 介绍2. adaptiveThreshold函数2.1 函数调用2.2 补充说明

3. 代码示例4. 效果4.1 原图(ori.img)4.2 处理后

5. 参考

1. 介绍

在这里 cv2.threshold函数 介绍了普通的opencv图像阈值处理函数。但threshold 的图像阈值处理对于某些光照不均的图像,这种全局阈值分割的方法并不能得到好的效果。

图像阈值化操作中,我们更关心的是从二值化图像中分离目标区域和背景区域,仅仅通过固定阈值很难达到理想的分割效果。在图片中的灰度是不均匀的,所以通常情况下图片中不同区域的阈值是不一样的。这样就需要一种方法根据图像不同区域亮度或灰度分布,计算其局部阈值来进行阈值处理。这种方法就是自适应阈值化图像处理,实际上这可以称为局部阈值法,在OpenCV中adaptiveThreshold就是这种方法。

2. adaptiveThreshold函数

2.1 函数调用

import cv2

dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

参数说明:

src:源图像,8位的灰度图。maxValue:用于指定满足条件的像素设定的灰度值adaptiveMethod:使用的自适应阈值算法,有2种类型ADAPTIVE_THRESH_MEAN_C算法(局部邻域块均值)或ADAPTIVE_THRESH_GAUSSIAN_C(局部邻域块高斯加权和)。

ADAPTIVE_THRESH_MEAN_C的计算方法是计算出邻域的平均值再减去第六个参数C的值;ADAPTIVE_THRESH_GAUSSIAN_C的计算方法是计算出邻域的高斯均匀值再减去第六个参数C的值。处理边界时使用BORDER_REPLICATE | BORDER_ISOLATED模式。 thresholdType:阈值类型,只能是THRESH_BINARY或THRESH_BINARY_INV二者之一,具体参考上面“图像阈值处理”的表格blockSize:表示邻域块大小,用来计算区域阈值,一般选择3、5、7……C:表示常数,它是一个从均匀或加权均值提取的常数,通常为正数,但也可以是负数或零 返回值:

dst:处理后的图像

2.2 补充说明

亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。在灰度图像中,灰度值变化明显的区域往往是物体的轮廓,所以将图像分成一小块一小块的去计算阈值往往会得出图像的轮廓。因此函数adaptiveThreshold除了将灰度图像二值化,也可以进行边缘提取。之所以能进行边缘提取,是因为当block很小时,如block_size=3 or 5 or 7时,“自适应”的程度很高,即容易出现block里面的像素值都差不多,这样便无法二值化,而只能在边缘等梯度大的地方实现二值化,结果显得它是边缘提取函数。当把blockSize设为比较大的值时,如blockSize=21 or 31 or 41时,adaptiveThreshold便是二值化函数blockSize必须为大于1的奇数(这里解释一下,size为偶数的话,该block的中心点就不确定了,因此为奇数。)如果使用平均值方法,平均值mean为180,差值delta为10,maxValue设为255。那么灰度小于170的像素为0,大于等于170的像素为255,如果是反向二值化,灰度小于170的像素为255,大于等于170的像素为0。

3. 代码示例

import cv2

img = cv2.imread('ori.jpg', 0)

img1 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 3, 5)

cv2.imwrite("new1.jpg", img1)

img2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 31, 5)

cv2.imwrite("new1.jpg", img2)

4. 效果

4.1 原图(ori.img)

4.2 处理后

new1.img new2.jpg

可以看到,

当blockSize小时,轮廓识别效果明显,突出边缘区域。而blockSize大时,就是一个二值化图像。

5. 参考

【1】https://blog.csdn.net/LaoYuanPython/article/details/108558834

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。