OpenCV-python学习笔记(六)——阈值处理

第六章 阈值处理

阈值处理是指剔除图像内像素值高于或者低于一定值的像素点

函数cv2,threshold()和cv2.adaptiveThreshold()用于实现阈值处理

6.1 threshold函数

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

retval:返回的阈值

dst: 阈值分割结果图像,与原图像大小类型相同

src: 要进行阈值分割的图像

thresh: 要设定的阈值

maxval:当type参数为THRESH_BINARY或者THRESH_BINARY_INV类型时,需要设定的最大值

type: 代表阈值分割的类型

6.1.1 二值化阈值处理(cv2.THRESH_BINARY)

二值化阈值处理是指将原始图像处理为仅有两个值的二值图像

对于灰度值大于阈值thresh的像素点,将其灰度值设定为最大值
对于灰度值小于或等于阈值thresh的像素点,将其灰度值设定为0

示例:

import cv2
img=cv2.imread ("lena.png")
t,rst=cv2.threshold ( img,127,255,cv2.THRESH_BINARY)
cv2.imshow ("img",img)
cv2.imshow ( "rst",rst)
cv2.waitKey ()
cv2.destroyAllWindows ()

结果:
在这里插入图片描述

6.1.2 反二值化阈值处理结果(THRESH_BINARY_INV)

对于灰度值大于阈值的像素点,将其值设定为0。
对于灰度值小于或等于阈值的像素点,将其值设定为255。

示例:

import cv2
img=cv2.imread ( "lena.png")
t,rst=cv2.threshold (img,127,255,cv2.THRESH_BINARY_INV)
cv2.imshow ("img",img)
cv2.imshow ("rst",rst)
cv2.waitKey ()
cv2.destroyAllWindows ()

结果:
在这里插入图片描述

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

将图像中大于阈值的像素点的值设定为阈值小于或等于该阈值的像素点保持不变

示例:

import cv2
img=cv2.imread ( "lena.png")
t,rst=cv2.threshold (img,127,255,cv2.THRESH_TRUNC)
cv2.imshow ("img",img)
cv2.imshow ("rst",rst)
cv2.waitKey ()
cv2.destroyAllWindows ()

结果:
请添加图片描述

6.1.4 超阈值处理(cv2.THRESH_TOZERO_INV)

将图像大于阈值的像素点设置为0小于或等于该阈值的像素点的值保持不变

示例:

import cv2
img=cv2.imread ( "lena.png")
t,rst=cv2.threshold (img,127,255,cv2.THRESH_TOZERO_INV)
cv2.imshow ("img",img)
cv2.imshow ("rst",rst)
cv2.waitKey ()
cv2.destroyAllWindows ()

结果:
在这里插入图片描述

6.1.5 低阈值处理(cv2.THRESH_TOZERO)

小于或等于阈值的像素点的值处理为0大于阈值的像素点的值保持不变。

import cv2
img=cv2.imread ( "lena.png")
t,rst=cv2.threshold (img,127,255,cv2.THRESH_TOZERO)
cv2.imshow ("img",img)
cv2.imshow ("rst",rst)
cv2.waitKey ()
cv2.destroyAllWindows ()

结果:
在这里插入图片描述

6.2 自适应阈值处理

使用变换的阈值完成对图像的阈值处理,称作自适应阈值处理。

通过计算每个像素点周围临近区域的加权平均值获得阈值,使用该阈值对当前的像素点进行处理。适用于处理明暗差异大的图像。

dst=cv.adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C)

dst: 自适应阈值处理结果。

src:原始图像。该图像必须是8位单通道的图像。

maxValue: 最大值。

adaptiveMethod: 自适应方法。

thresholdType: 阈值处理方式,该值必须是cv2.THRESH_BINARY 或者cv2.THRESH_BINARY_INV中的一个。

blockSize: 块大小。表示一个像素在计算其阈值时所使用的邻域尺寸,通常为3。

C是常量

cv.ADAPTIVE_THRESH_MEAN_C: 邻域所有像素点的权重值是一致的

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

示例:

import cv2
img=cv2.imread ( "computer.png",0)		#将图像调整为单通道的灰度图像
t1,thd=cv2.threshold (img,127,255,cv2.THRESH_BINARY)
athdMEAN=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)  #采用方法ADAPTIVE_THRESH_MEAN_C
athdGAUS=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)
cv2.imshow ("img",img)
cv2.imshow ("thd",thd)
cv2.imshow ("athdMEAN",athdMEAN)
cv2.imshow ("athdGAUS",athdGAUS)
cv2.waitKey ()
cv2.destroyAllWindows ()

结果:
在这里插入图片描述

6.3 Otsu处理

使用函数cv2.threshold()函数进行阈值处理,需要自定义一个阈值,以此作为图像阈值处理的依据。用于处理色彩均匀的图像,阈值通常为127。

otsu方法会历遍所有可能阈值,找到最佳值。

t,otsu=cv2.threshold (img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

对参数type增加参数cv2.THRESH_OTSU,要把阈值设为0,返回值是阈值的最优值。

示例:对一幅图像tiffany进行127的阈值处理和otsu方法的阈值处理,对比

import cv2
img=cv2.imread ("tiffany.png",0)
t1,thd=cv2.threshold ( img,127,255,cv2.THRESH_BINARY)
t2,otsu=cv2.threshold ( img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow ("img", img)
cv2.imshow ("thd",thd )
cv2.imshow ( "otus",otsu)
cv2.waitKey ()
cv2.destroyAllWindows ()

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_56321457/article/details/125954044