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

我的小程序:

待办计划:卷起来吧,少年!
我们记账:年薪50w够花么?

 

在文章“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:一个常数,阈值等于平均值或加权平均值减去该常数

函数返回一个二值图像。

下面是一个例子:

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

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

可以看到效果并不好。

使用自适应阈值的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。效果如下:

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

待办计划:卷起来吧,少年!
我们记账:年薪50w够花么?

 

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

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值