文章目录
- 1、什么是二值化处理
- 2、为什么要进行二值化处理
- 3、如何进行二值化处理
- (1)简单阈值
- (2)自适应阈值
- (3)Otsu's二值化
- 4、参考文献:
1、什么是二值化处理
2、为什么要进行二值化处理
3、如何进行二值化处理
(1)简单阈值
简单阈值是选取一个全局阈值,然后把整幅图像分成非黑即白的二值图像,灰度值大于阈值就赋为255反之为0。
ret,mask = cv2.threshold(img2gray,175,255,cv2.THRESH_BINAR)
返回值一: 阈值,(Otsu‘s二值化会用到)
返回值二: 处理以后的图像
参数一: 初始图像
参数二:我们自己设定的阈值
参数三: 当图像像素置超过我们的设定的阈值时赋为255
参数四 : 我们设定的二值化类型
阈值 | 小于阈值 | 大于阈值 |
THRESH_BINARY | 置0 | 置填充色 |
THRESH_BINARY_INV | 置填充色 | 0 |
THRESH_TRUNC | 保持原色 | 置灰色 |
THRESH_TOZERO | 置0 | 保持原色 |
THRESH_TOZERO_INV | 保持原色 | 置0 |
注:cv2.threshold最后一个参数可以写为0,1,2,3,4按顺序对应表格中的五种
代码如下
注:将阈值大于127的像素值置为255
(2)自适应阈值
简单阈值的方式过于粗鲁,自适应阈值更趋向于局部性的阈值,也就是说,将像素点的像素值与该点所在的区域的像素值的平均值(最大值,中位数等)决定该店属于0还是1
th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,0,11,2)
返回值: 处理后返回的图像
参数一: 原始图像
参数二:像素值上限
参数三:自适应方法
— cv2.ADAPTIVE_THRESH_MEAN_C :领域内均值
—cv2.ADAPTIVE_THRESH_GAUSSIAN_C :领域内像素点加权和
参数四:赋值方式(参考简单阈值中介绍的表格)
参数五:设定方阵的大小(因为是将一个点与其周围的方阵数据对比)
参数六:常数,每个区域计算出的阈值的基础上在减去这个常数作为这个区域的最终阈值,可以为负数
(3)Otsu’s二值化
对于简单阈值,cv2.threshold()的第二个参数是我们自己设定的阈值范围,一张图片的最好的阈值分界线不是凭感觉看出来的,而是有合理的方式能找到的,threshold的第一个返回值就是处理图片的阈值分界线。因此,只要在threshold函数的最后一个参数在原有的基础上加上’cv2.THRESH_OTSU‘那么第一个返回值就是最佳阈值。直接看代码更好理解。
注:OTSU非常适合灰度直方图具有双峰值的情况
4、参考文献:
https://numpy.org/doc/stable/reference/generated/numpy.hstack.html https://zhuanlan.zhihu.com/p/360824614
声明:部分图像源自网络,本文仅供学习交流使用,如果不妥,请联系删除。