6.3 阈值处理-- Otsu 处理

《OpenCV 轻松入门 面向Python》 学习笔记

在使用函数cv.threshold()进行阈值处理时,需要自定义一个阈值,并以此阈值作为图像阈值处理的依据。通常情况下图像都是色彩均衡的,这是直接将阈值设为127是比较合适的。

但是,有时图像灰度级的分布是不均匀的,如果此时还将阈值设值为127,那么阈值处理的结果就是失败的。

如果有一个图像:
[ 123 123 123 123 123 123 123 123 123 123 123 123 126 126 126 123 123 126 126 126 123 123 126 126 126 ] \begin{bmatrix} 123 & 123 & 123 & 123 & 123\\ 123 & 123 & 123 & 123 & 123\\ 123 & 123 & 126 & 126 & 126\\ 123 & 123 & 126 & 126 & 126\\ 123 & 123 & 126 & 126 & 126\\ \end{bmatrix} 123123123123123123123123123123123123126126126123123126126126123123126126126

如果此时仍然以127作为阈值,那么图像处理结果就是
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] \begin{bmatrix} 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ \end{bmatrix} 0000000000000000000000000
很显然,真是不合理的,我们可以观察到,如果我们以阈值125进行分割,可以得到较好的效果
[ 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 ] \begin{bmatrix} 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 255 & 255& 255\\ 0 & 0 & 255 & 255& 255\\ 0 & 0 & 255 & 255& 255\\ \end{bmatrix} 0000000000002552552550025525525500255255255
OTSU可以帮我们遍历所有可能的阈值,从而找到最佳的阈值

举例:

t, result_img = cv2.threshold(src_image, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

具体操作方法是:

  • 在普通阈值操作函数cv2.threshold()中,对参数type的类型多传递一个参数cv2.THRESH_OTSU,即可实现Otsu方式的阈值分割
  • 必须要把阈值设定为0
  • 返回的t是Otsu方法计算得到并使用的最优阈值, 返回值 result_img 是阈值处理后的结果图像
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Enzo 想砸电脑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值