文章目录
🍹1. 什么是阈值处理?
🍹2.二值化处理 与 反二值化处理
🍹3. 零处理
🍹4. 截断处理
🍹5.五种处理方式汇总
🍹6. 自适应处理
✨平均法 cv2.ADAPTIVE_THRESH_MEAN_C
✨高斯法 cv2.ADAPTIVE_THRESH_GAUSSIAN_C
🍹7. Otsu方法
🍹1. 什么是阈值处理?
在图像处理中,阈值处理是一种很重要的处理方式。阈值处理即给像素值设定一个阈值,然后所有的像素值都与目标阈值进行比较,根据像素值与阈值的关系,对像素值做出相应的调整,以达到影响图片的效果的预期。在计算机视觉技术中心,阈值处理十分重要,像素在经过阈值处理后,对肉眼观感可能不会太好,但是对程序而言图片上的人或物则通常更容易被搜寻到特征,以被识别出。从而实现识别的目的。
阈值处理常用的方法:threshold()方法。
✨其语法如下:
threshold(src, thresh, maxval, type, dst=None)
- src: 原图
- thresh: 阈值
- maxval: 阈值处理采用的最大值,通常选择255作为最大值,即白色。
- type: 阈值处理类型。
常用的阈值处理类型
类型 |
含义 |
cv2.THRESH_BINARY |
二值化阈值处理 |
cv2.THRESH_BINARY_INY |
反二值化阈值处理 |
cv2.THRESH_TOZERO |
低于阈值零处理 |
cv2.THRESH_TOZERO_INV |
超出阈值零处理 |
cv2.THRESH_TRUNC |
截断阈值处理 |
🍹2.二值化处理 与 反二值化处理
二值化处理,也称二值化阈值处理,该处理使每个像素值与指定的阈值相比较,大于阈值的像素变为最大值,小于阈值的像素值变为零。最终可以使像素只保留两种像素值,得到“非黑即白”的图像(不同与灰度处理)。
反二值化处理的处理结果与二值化处理相反,得到的也是只有黑白两种颜色的图像,不同之处在于大于阈值的像素值变为0,小于阈值的变为阈值处理采用的最大值。
下面,对二值化处理的方式进行示例,
选择图片素材:
✨梵高 《向日葵》✨
以127作为阈值,255为阈值处理最大值为例,读取图像时,需要先将图像转化为灰度图像。
import cv2 # 将图像读成灰度图像 img = cv2.imread("sunflowers.jpg", 0) # 做二值化处理 t, dst = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) # 其中返回的t即我们选择的阈值127。 cv2.imshow('dst', dst) cv2.waitKey() cv2.destroyAllWindows()
处理效果:
👇同理,再对《向日葵》做反二值化处理:
import cv2 img = cv2.imread("sunflowers.jpg", 0) # 反二值化阈值处理 t, dst = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV) cv2.imshow('dst', dst) cv2.waitKey() cv2.destroyAllWindows()
🍹3. 零处理
零处理包括 低于阈值零处理 和 超出阈值零处理(也称低阈值零处理和高阈值零处理)。低于阈值零处理将低于阈值的像素值变为0,超出阈值零处理则将高于阈值的像素值变为0。
import cv2 img = cv2.imread("sunflowers.jpg", 0) # 低于阈值零处理 t, dst = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO) cv2.imshow('dst', dst) cv2.waitKey() cv2.destroyAllWindows()
import cv2 img = cv2.imread("sunflowers.jpg", 0) # 超出阈值零处理 t, dst = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV) cv2.imshow('dst', dst) cv2.waitKey() cv2.destroyAllWindows()
👇超阈值零处理效果呈现:
🍹4. 截断处理
截断处理也称截断阈值处理,将大于阈值的像素值变成跟阈值一样,小于阈值的像素值则保持不变。
截断处理后图像的整体颜色会变暗,亮度降低,原本浅色区域的颜色会变更浅。
代码示例如下:
import cv2 # 将图像读成灰度图像 img = cv2.imread("sunflowers.jpg", 0) # 截断处理 t, dst = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC) cv2.imshow('dst', dst) cv2.waitKey() cv2.destroyAllWindows()