[opencv教程(七)]图像阈值处理

目录

 简单阈值处理方法

效果

 OTSU算法

原理

优点

案例

效果

 TRANGLE算法

原理

OTSU的区别

案例

效果


 简单阈值处理方法

ret,dst = cv2.threshold(src,thresh,maxval,type)

  • ret:返回的阈值
  • dst:返回的图像
  • src:已通过cv2,read获取的图片
  • thresh:设定的阈值 一般为127 为0~255的中间
  • maxval:当像素值超过了阈值,所赋予的值
  • type:二值化操作的类型

type类型包括

  • cv2.THRESH_BINARY:二进制阈值处理。如果像素值大于阈值,则将其设置为最大值;否则将其设置为 0
  • cv2.THRESH_BINARY_INV:反二进制阈值处理。如果像素值大于阈值,则将其设置为 0;否则将其设置为最大值
  • cv2.THRESH_TRUNC: 截断阈值处理。如果像素值大于阈值,则将其设置为阈值;否则保持不变
  • cv2.THRESH_TOZERO:零阈值处理。如果像素值大于阈值,则保持不变;否则将其设置为 0
  • cv2.THRESH_TOZERO_INV:反零阈值处理。如果像素值大于阈值,则将其设置为 0;否则保持不变
#超过阈值的部分取maxval,否则取0
ret,binary = cv2.threshold(starSky_Gary,127,255,cv2.THRESH_BINARY)
#前者的反转
ret,binary_inv = cv2.threshold(starSky_Gary,127,255,cv2.THRESH_BINARY_INV)
#大于阈值部分设为阈值,否则不变
ret,trunc = cv2.threshold(starSky_Gary,127,255,cv2.THRESH_TRUNC)
#大于阈值部分不变,否则为0
ret,toZero = cv2.threshold(starSky_Gary,127,255,cv2.THRESH_TOZERO)
#Thresh_Tozero的反转
ret,toZero_inv = cv2.threshold(starSky_Gary,127,255,cv2.THRESH_TOZERO_INV)

titles = ['Origin','Binary','Binary_Inv','Trunc','ToZero','ToZero_Inv']
images = [starSky_Gary,binary,binary_inv,trunc,toZero,toZero_inv]

for i in range(6):
    plt.subplot(2,3,i+1)
    plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])

plt.show()

效果

 OTSU算法

OTSU算法 即大津算法 又叫类间方差阈值分割法 只要找到类间方差最大的阈值 就是最大阈值 可以使得前景色和后景色分割更加明显 

类间方差就是两个类别之间的差异

原理

        在大津法中,它是通过计算前景色(A部分)与背景色(B部分)的加权平均值来计算的。具体来说,设阈值为T,图像中灰度值小于等于T的像素点为类别A,灰度值大于T的像素点为类别B。设ωA和ωB分别为类别A和类别B中像素点的数量占总像素点数量的比例,μA和μB分别为类别A和类别B中像素点的灰度值平均值,则类间方差σ²(T)可以表示为:

σ²(T) = ωA(T)(μA(T) - μ(T))² + ωB(T)(μB(T) - μ(T))²

其中μ(T)为整幅图像的灰度值平均值。

        大津法通过枚举所有可能的阈值T,计算每个阈值下的类间方差,并选择使类间方差最大的阈值作为最佳阈值。

优点

  1. 自动计算最佳阈值
  2. 算法简单 不受图像亮度和对比度的影响

案例

#自适应阈值分割 otsu 大律法 它将与其他二值化方法一起使用 当阈值为0 最大值为255的时候 otsu将自动计算最佳阈值(即类间方差最大)
ret,ostu_binary = cv2.threshold(starSky_Gary,0,255,cv2.THRESH_OTSU+cv2.THRESH_BINARY)
Images.ImageShow('OSTU',ostu_binary)

效果

 TRANGLE算法

 OpenCV 中cv2.threshold()函数中使用的一个标志。它用于使用三角算法确定图像二值化的阈值,适用于单峰直方图

原理

一种自适应阈值分割方法,它使用三角算法来处理像素点,适用于单峰图。它的原理是通过计算图像的灰度直方图,寻找直方图中两侧边界和最大值,然后检测最大波峰是否在亮的一侧,如果不是则翻转直方图。最后,计算阈值得到阈值 T,如果前面已经翻转了,则阈值要用 255

OTSU的区别

OTSU适用于双峰图 而TRANGLE适用于单峰图

案例

#TRIANGLE用于使用三角算法确定图像二值化的阈值
ret,triangle_bianry = cv2.threshold(starSky_Gary,0,255,cv2.THRESH_TRIANGLE+cv2.THRESH_BINARY)
Images.ImageShow('TRANGLE',triangle_bianry)

效果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值