阈值处理是指剔除图像内像素值高于一定值或者低于一定值的像素点;例如,全局阈值法方法就是将图像中低于某个阈值的像素设置为黑色(0),而其他的设置为白色(255)。全局固定阈值很容易理解,就是对整幅图像都是用一个统一的阈值来进行二值化。 自适应阈值算法:(自适应计算合适的阈值,而不是固定阈值)。
在OpenCv中,我们可以通过使用cv2.threshold()函数。
threshold函数及参数说明:
cv2.threshold(src, thresh, maxval, type[, dst]) -> retval, dst
src 参数表示输入图像(多通道,8位或32位浮点)。
thresh 参数表示阈值。
maxval 参数表示与THRESH_BINARY和THRESH_BINARY_INV阈值类型一起使用设置的最大值一般为255。
type 参数表示阈值类型。
retval 参数表示返回的阈值。若是全局固定阈值算法,则返回 hresh 参数值。若是全局自适应阈值算法,则返回自适应计算得出的合适阈值。
dst 参数表示输出与src相同大小和类型以及相同通道数的图像。
其中type阈值类型可取:
二值化阈值处理(CV2.THRESH_BINARY)
反二值化阈值处理(CV2.THRESH_BINARY_INV)
截断阈值化处理(CV2.THRESH_TRUNC)
超阈值零处理(CV2.THRESH_TOZERO_INV)
低阈值零处理(CV2.THRESH_TOZERO)
实例:
import cv2
import matplotlib.pyplot as plt
def thd():
filepath='/data/workspace/myshixun/task1/'
img = cv2.imread(filepath+'cat.jpg')
img = img[:,:,(2,1,0)]
#把读入的图片转换为灰度图
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret1,thresh1 = cv2.threshold(img_gray,150,255,cv2.THRESH_BINARY)
ret2,thresh2 = cv2.threshold(img_gray,150,255,cv2.THRESH_BINARY_INV)
ret3,thresh3 = cv2.threshold(img_gray,150,255,cv2.THRESH_TRUNC)
ret4,thresh4 = cv2.threshold(img_gray,150,255,cv2.THRESH_TOZERO)
ret5,thresh5 = cv2.threshold(img_gray,150,255,cv2.THRESH_TOZERO_INV)
# 作图并保存到指定路径
titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.savefig(filepath+'out/threthold.png')