opencv学习—threshold函数的使用
目录
图像阈值分割是一种广泛应用的分割技术,利用图像中要提取的目标区域与其背景在灰度特性上的差异,把图像看作具有不同灰度级的两类区域(目标区域和背景区域)的组合,选取一个比较合理的阈值,以确定图像中每个像素点应该属于目标区域还是背景区域,从而产生相应的二值图像。OpenCV中提供了函数cv2.threshold();
阈值分割法的特点是:适用于目标与背景灰度有较强对比的情况,重要的是背景或物体的灰度比较单一,而且总可以得到封闭且连通区域的边界。
cv2.threshold (src, thresh, maxval, type)
cv2.threshold (源图片, 阈值, 填充色, 阈值类型)
-
src:单通道原图像
-
thresh:阈值,取值范围为(0~255),开始点
-
maxval:填充色,取值范围为(0,255),输出图像中灰度值最大值
-
type:阈值类型,如下所示:
阈值类型
关系如下:
python代码:
import cv2
import matplotlib.pyplot as plt
#读入彩色RGB图像,转为灰度图像
img=cv2.imread("C:\\Users\\Lijian\\Desktop\\7.jpg")
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#不同类型阈值处理
thresh,img1=cv2.threshold(img,1,255,cv2.THRESH_BINARY)
thresh,img2=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
thresh,img3=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
thresh,img4=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
thresh,img5=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
titles=('img','THRESH_BINARY','THRESH_BINARY_INV','THRESH_TRUNC','THRESH_TOZERO','THRESH_TOZERO_INV')
images=[img,img1,img2,img3,img4,img5]
for i in range(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],cmap="gray")
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
示例如下: