5.3 反二值化阈值处理(cv2.THRESH_BINARY_INV)

该方法表示:对于像素值大于阈值thresh的像素点,将其设置为0;对于像素值小于阈值thresh的像素点,将其设置为最大值。

使用函数cv2.threshold()对图像进行二值化阈值操作代码如下:

复制代码

1 import cv2
 2 img=cv2.imread(‘E:\python_opencv/tupian.jpg’)
 3 t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) #类型设置为cv2.THRESH_BINARY_INV,阈值设置为127
 4 cv2.imshow(‘img’,img)
 5 cv2.imshow(‘rst’,rst)
 6 cv2.waitKey()
 7 cv2.destroyAllWindows()


复制代码
运行结果如下图,左为原图像,右为反二值化阈值处理结果。

5.4 截断阈值化处理(cv2.THRESH_TRUNC)

该方法表示:对于像素值大于阈值thresh的像素点,将其设置为阈值;对于像素值小于阈值thresh的像素点,保持不变。

使用函数cv2.threshold()对图像进行截断阈值化处理代码如下:

复制代码

1 import cv2
 2 img=cv2.imread(‘E:\python_opencv/tupian.jpg’)
 3 t,rst=cv2.threshold(img,127,255,cv2.THRESH_TRUNC) #类型设置为cv2.THRESH_TRUNC,阈值设置为127
 4 cv2.imshow(‘img’,img)
 5 cv2.imshow(‘rst’,rst)
 6 cv2.waitKey()
 7 cv2.destroyAllWindows()


复制代码
运行结果如下图,左为原图像,右为截断阈值化处理结果。

5.5 超阈值零处理(cv2.THRESH_TOZERO_INV)

该方法表示:对于像素值大于阈值thresh的像素点,将其设置为0;对于像素值小于阈值thresh的像素点,保持不变。

使用函数cv2.threshold()对图像进行超阈值零处理代码如下:

复制代码

1 import cv2
 2 img=cv2.imread(‘E:\python_opencv/tupian.jpg’)
 3 t,rst=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV) #类型设置为cv2.THRESH_TOZERO_INV,阈值设置为127
 4 cv2.imshow(‘img’,img)
 5 cv2.imshow(‘rst’,rst)
 6 cv2.waitKey()
 7 cv2.destroyAllWindows()


复制代码
运行结果如下图,左为原图像,右为超阈值零处理结果。

5.6 低阈值零处理(cv2.THRESH_TOZERO)

该方法表示:对于像素值小于或等于阈值thresh的像素点,将其设置为0;对于像素值大于阈值thresh的像素点,保持不变。

使用函数cv2.threshold()对图像进行低阈值零处理代码如下:

复制代码

1 import cv2
 2 img=cv2.imread(‘E:\python_opencv/tupian.jpg’)
 3 t,rst=cv2.threshold(img,127,255,cv2.THRESH_TOZERO) #类型设置为cv2.THRESH_TOZERO,阈值设置为127
 4 cv2.imshow(‘img’,img)
 5 cv2.imshow(‘rst’,rst)
 6 cv2.waitKey()
 7 cv2.destroyAllWindows()


复制代码
运行结果如下图,左为原图像,右为低阈值零处理结果。

5.7 自适应阈值处理

一般情况下,图像中只是用一个阈值,就会造成轮廓与内容分割不均衡,无法得到清晰有效的阈值处理图像。

OpenCV中提供了cv2.adaptiveThreshold()函数用于实现自适应阈值处理。自适应阈值处理的原理,是通过计算每个像素点的邻域像素进行加权平均而获得阈值,能够较好地处理色彩不均衡的图像。

cv2.adaptiveThreshold()函数中,有两个参数类型:

cv2.ADAPTIVE_THRESH_MEAN_C 邻域内所有像素点的权重都相同

cv2.ADAPTIVE_THRESH_GAUSSIAN_C 通过高斯方程得到各个像素点的权重值,与邻域内像素点到中心的距离有关

使用二值化阈值函数cv2.threshold()对图像进行自适应阈值处理代码如下:

复制代码

1 import cv2
 2 img=cv2.imread(‘E:\python_opencv/tupian.jpg’,0)
 3 #类型设置为cv2.ADAPTIVE_THRESH_MEAN_C,后面必须加cv2.THRESH_BINARY或cv2.THRESH_BINARY_INV,邻域大小设置为5×5,最后的3是常量
 4 athdMEAN=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)
 5 #类型设置为cv2.ADAPTIVE_THRESH_GAUSSIAN_C,后面必须加cv2.THRESH_BINARY或cv2.THRESH_BINARY_INV,邻域大小设置为5×5,最后的3是常量
 6 athdGAUS=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)
 7 cv2.imshow(‘img’,img)
 8 cv2.imshow(‘athdMEAN’,athdMEAN)
 9 cv2.imshow(‘athdGAUS’,athdGAUS)
 10 cv2.waitKey()
 11 cv2.destroyAllWindows()


复制代码
运行结果如下图,左为原图像,中为像素权重平均处理结果,右为高斯权重值处理结果。可以看到,自适应阈值处理保留了更多的细节信息。

5.8 Otsu方法(cv2.THRESH_OTSU)

Otsu方法能够根据当前图像生成最佳的类间分割阈值,原理是遍历所有可能的阈值,从而找到最合适的阈值。

通过函数cv2.threshold()中传递类型参数:cv2.THRESH_OTSU,来实现Otsu算法。

需要注意的是,在使用Otsu方法时,要把阈值设置为0,语句为:

t是Otsu方法得到并使用的最合适阈值,参数中阈值设置为0,传递两种类型

t,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
使用Otsu方法对图像进行自适应阈值处理代码如下:

复制代码

1 import cv2
 2 img=cv2.imread(‘E:\python_opencv/tupian.jpg’,0)
 3 #类型设置为cv2.THRESH_BINARY+cv2.THRESH_OTSU,阈值设置为0
 4 t,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
 5 cv2.imshow(‘img’,img)
 6 cv2.imshow(‘otsu’,otsu)
 7 cv2.waitKey()
 8 cv2.destroyAllWindows()
 USB Microphone https://www.soft-voice.com/