图像阈值化可以理解为一个简单的图像分割操作,阈值又称为临界值,它的目的是确定出一个范围,然后这个范围内的像素点使用同一种方法处理,而阈值之外的部分则使用另一种处理方法或保持原样。
阈值处理有2种方式,一种是固定阈值方式,又包括多种处理模式,另一种是非固定阈值,由程序根据算法以及给出的最大阈值计算图像合适的阈值,再用这个阈值进行二值化处理
1.固定阈值方式(threshold)
Opencv API:
ret, dst = cv2.threshold(src, thresh, maxval, type)
输入:1.src:输入的图像(只能为单通道图像,例如灰度图);2.thresh:阈值。通过阈值水平的像素被接受,不通过的则不接受,阈值判断时,是以小于等于阈值和大于阈值作为分界条件;3.maxVal:maxval是阈值化后的最大值;4.type:二值化操作的类型,包含以下5种类型
函数返回值:ret表示实际使用的阈值即threshold,dst表示输出图像
类型 | 说明 |
---|---|
cv2.THRESH_BINARY | 超过阈值部分取maxval(最大值),否则取0 |
cv2.THRESH_BINARY_INV | 不超过阈值的像素设置为maxVal,超过的设置为0 上一种的反转 |
cv2.THRESH_TRUNC | 大于阈值部分设为阈值,否则不变 trunc截断 即用阈值来截断 |
cv2.THRESH_TOZERO | 小于或等于阀值的设为0,其余部分不变 |
cv2.THRESH_TOZERO_INV | THRESH_TOZERO的反转 |
2.自适应阈值方式(adaptiveThreshold)
根据图像上的每一个小区域,计算与其对应的阈值,从而使得同一幅图像上的不同区域采用不同的阈值,在亮度不同的情况下得到更好的结果。该函数用来对灰度图应用自适应阈值,取决于传递给它的自适应方法。需要传递几个参数,包括最大阈值,块大小(可以是3、5、7等)以及一个将从计算得到的块均值中减去的常量值,该值可以为0。
Opencv API:
dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
src: 需要处理的源图像。
maxValue: 当像素值超过阈值时,所赋的最大值。
adaptiveMethod: 自适应阈值算法的类型,目前支持ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C两种类型。
thresholdType: 阈值的类型,目前支持THRESH_BINARY 和 THRESH_BINARY_INV两种类型。
blockSize: 自适应阈值算法使用的块大小,必须是一个奇数。
C: 从均值或加权均值中减去的常量,用于调节阈值。