全局阈值
retval, dst = cv.threshold( src, thresh, maxval, type[, dst] )
对多通道图像进行固定阈值的二值化。
参数 | 含义 |
---|---|
src | 多通道,8位或32位浮点数图像 |
dst | 与输入图像相同尺寸,相同数据类型、相同通道数的图像 |
thresh | 阈值 |
maxval | 用于THRESH_BINARY 和THRESH_BINARY_INV 标志下的最大值 |
type | 阈值化方法 |
阈值化方法
方法 | 含义 |
---|---|
cv.THRESH_BINARY | 像素值大于给定阈值的被设置为指定的最大值,否则设置为零 |
cv.THRESH_BINARY_INV | 像素值小于给定阈值的被设置为指定的最大值,否则设置为零 |
cv.THRESH_TRUNC | 像素值大于给定阈值的被设置给定阈值,其余像素值不变 |
cv.THRESH_TOZERO | 像素值大于给定阈值的不变,其余像素值为零 |
cv.THRESH_TOZERO_INV | 像素值大于给定阈值的设置为零,其余像素值不变 |
cv.THRESH_MASK | |
cv.THRESH_OTSU | 使用OTSU算法选择最优的阈值,需与前面的类型组合使用且仅支持单通道图像 |
cv.THRESH_TRIANGLE | 使用Triangle算法选择最优的阈值,需与前面的类型组合使用且仅支持单通道图像 |
局部阈值
dst = cv.adaptiveThreshold( src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst] )
参数 | 说明 |
---|---|
src | 8位单通道图像 |
dst | 与输入图像相同尺寸,相同类型的输出图像 |
maxValue | 在满足条件下的非零值将被赋予的值 |
adaptiveMethod | 自适应阈值方法. cv.ADAPTIVE_THRESH_MEAN_C 和 cv.ADAPTIVE_THRESH_GAUSSIAN_C 两种方法都是逐个像素计算自适应阈值T(x,y),方法是通过计算每个像素周围的 blocksize * blocksize 区域的加权平均值然后减去常量C。不同的是,如果选择的均值方法是cv.ADAPTIVE_THRESH_MEAN_C ,那么均值时取得权值是相等的。如果选择的均值方法是cv.ADAPTIVE_THRESH_GAUSSIAN_C ,(x,y)周围的像素的权值则根据其到中心点的距离通过高斯方程得到 |
thresholdType | 阈值化方法,仅支持 THRESH_BINARY or THRESH_BINARY_INV |
blockSize | 自动计算时,使用邻域的尺寸大小 |
C | 常量 |
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('./opencv/images/lena-gray.jpg')
img_mean_binary = cv.adaptiveThreshold(img[:, :, 0], 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 11, 10)
img_mean_binary_inv = cv.adaptiveThreshold(img[:, :, 0], 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY_INV, 11, 10)
img_gauss_binary = cv.adaptiveThreshold(img[:, :, 0], 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 10)
img_gauss_binary_inv = cv.adaptiveThreshold(img[:, :, 0], 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY_INV, 11, 10)
plt.figure()
plt.subplot(2, 2, 1), plt.imshow(img_mean_binary), plt.title('img_mean_binary')
plt.subplot(2, 2, 2), plt.imshow(img_mean_binary_inv), plt.title('img_mean_binary_inv')
plt.subplot(2, 2, 3), plt.imshow(img_gauss_binary), plt.title('img_gauss_binary')
plt.subplot(2, 2, 4), plt.imshow(img_gauss_binary_inv), plt.title('img_gauss_binary_inv')
plt.show()