【图像处理】图像二值化的Otsu技术(python)

2025-12-02 14:34:11

1、给出一幅图片。

【图像处理】图像二值化的Otsu技术(python)

2、读取灰度图:

img=cv2.imread('0.png',0)

【图像处理】图像二值化的Otsu技术(python)

3、对灰度图进行二值化处理:

ret, th = cv2.threshold(img, 100,255, cv2.THRESH_BINARY)

用的方法是cv2.THRESH_BINARY,阈值是100。

【图像处理】图像二值化的Otsu技术(python)

4、看一下上面方法之下,阈值从0增加到255的动画效果。

【图像处理】图像二值化的Otsu技术(python)

5、如果加上Otsu方法,看看效果。

ret, th = cv2.threshold(img,0,255, 

cv2.THRESH_BINARY+cv2.THRESH_OTSU)

这里面,我们没有规定阈值,但是Otsu方法可以按照既定的算法,求出阈值。

这个状态必定在上面动态图里面出现过。换言之,Otsu方法求出的阈值,是一个固定的数字。

【图像处理】图像二值化的Otsu技术(python)

6、如果对原图进行局部二值化,且使用上Otsu,会不会更好一些呢?

for i in range(10):

    for j in range(10):

        ret, th = cv2.threshold(img[0+int(u/10)*i:0+int(u/10)*(i+1),

                  0+int(v/10)*j:0+int(v/10)*(j+1)],

                  0,255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

        pic[0+int(u/10)*i:0+int(u/10)*(i+1),0+int(v/10)*j:0+int(v/10)*(j+1)]=th

结果不算如意。

【图像处理】图像二值化的Otsu技术(python)

7、按照步骤五的结果抠图。

pic=cv2.imread('0.png')

for i in range(u):

    for j in range(v):

        if th[i,j]==0:

            pic[i,j]=pic[i,j]*0

【图像处理】图像二值化的Otsu技术(python)

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢