opencv-python自适应阈值二值化函数cv2.adaptiveThreshold使用及效果

在文章“opencv-python图像二值化函数cv2.threshold函数详解及参数cv2.THRESH_OTSU使用”中介绍了二值化函数threshold(),但它使用的是全局阈值,即整幅图像使用同一个阈值。但有时这种做法效果不理想,需要采用自适应的阈值,即图像不同区域采用不同的阈值。opencv-python中使用adaptiveThreshold()函数。

adaptiveThreshold()函数用法:

adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) -> dst

src:图像

maxValue:设置的最大值

adaptiveMethod:指定的阈值计算方法,有cv2.ADAPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值;cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值取自相邻区域的加权和,权重为一个高斯窗口。

thresholdType:跟threshold()方法中一样,有cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV等值

blockSize:邻域大小

C:一个常数,阈值等于平均值或加权平均值减去该常数

函数返回一个二值图像。

下面是一个例子:

opencv-python自适应阈值二值化函数cv2.adaptiveThreshold使用及效果_第1张图片

对于上图,若直接使用cv2.threshold()函数:

ret,th0 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)

opencv-python自适应阈值二值化函数cv2.adaptiveThreshold使用及效果_第2张图片

可以看到效果并不好。

使用自适应阈值的cv2.adaptiveThreshold函数:

th1 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,5)
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,5)

上面两行代码分别使用平均值阈值和加权阈值的自适应阈值方法进行二值化,窗口大小为11,常数c等于5。效果如下:

opencv-python自适应阈值二值化函数cv2.adaptiveThreshold使用及效果_第3张图片

效果比cv2.threshold()好得多。

opencv-python自适应阈值二值化函数cv2.adaptiveThreshold使用及效果_第4张图片 微信交流 opencv-python自适应阈值二值化函数cv2.adaptiveThreshold使用及效果_第5张图片 多谢打赏

参考资料:《OpenCV-Python 中文教程》段力辉 译

你可能感兴趣的:(数字图像处理,python,自适应阈值,图像二值化,opencv-python)