OpenCV-Python 图像二值化
一.什么是图像二值化
-
彩色图像:三个通道:0-255,0-255,0-255,所以可以有2^24位空间
-
灰度图像:一个通道:0-255,所以有256种颜色
-
二值图像:只有两种颜色:黑和白,1白色(255) 0黑色(0)
二.图像二值化
Ⅰ先获取阈值:
- 从直方图找到波峰波谷,作连线处理
- 从直方图各个点向连线作垂直线,找到最长
- 在垂直线最长的点做一个offset偏移值,找到阈值
Ⅱ根据阈值去二值化图像
- 图像二值化方法:全局阈值与局部阈值
ⅢOpenCV中的二值化方法
- OpenCV中图像二值化方法:
-OTSU
-Triangle
-自动与手动 - 自适应阈值
三.全局阈值函数cv2.threshold
· 函数原型:
double threshold(InputArray src, OutputArray dst, double thresh,
double maxval, int type)
->retval,dst
· 参数:
- src - 输入数组/图像(多通道,8位或32位浮点)
- thresh - 阈值
- maxval - 最大值,与#THRESH_BINARY和#THRESH_BINARY_INV阈值类型一起使用的最大值(maximum value)
- type - 阈值类型
- dst - 输出数组/图像(与src相同大小和类型以及相同通道数的数组/图像)。
此外,特殊值#THRESH_OTSU或#THRESH_TRIANGLE可以与上述值之一组合。 在这些情况下,函数使用Otsu或Triangle算法确定最佳阈值,并使用它而不是指定的阈值。
· 返回值:
- retval - 阈值 thresh
若是全局固定阈值算法,则返回thresh参数值。
若是全局自适应阈值算法,则返回自适应计算得出的合适阈值。 - dst - 经函数处理后的图像 image
· 阈值类型type:
原灰度图像的像素值:
-
二进制阈值化 THRESH_BINARY :过门限的值为最大值,其他值为0
-
反二进制阈值化THRESH_BINARY_INV :过门限的值为0,其他值为最大值
-
截断阈值化 THRESH_TRUNC :过门限的值为门限值,其他值不变
-
阈值化为0 THRESH_TOZERO :