对图像的阈值操作
import cv2
import matplotlib.pyplot as pltimg = cv2.imread('E:/Jupyter_workspace/study/data/cat.png',1)
ret, thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img,127,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')#这里的(2,3,i+1)表示两行三列来显示这六种照片,i+1表示每个照片的位置plt.title(titles[i])plt.xticks([]),plt.yticks([])plt.show()
ret,dst = cv2.threshold(src,thresh,maxval,type)
ret:阈值
dst:输出图
src:输入图,只能输入单通道图像,通常来说为灰度图
thresh:阈值,为一个常见的数值,通常设置为127,因为取值范围是[0,255]
maxval:当像素值超过了阈值(或小于阈值,根据type来决定),所赋予的值,一般为255
type:二值化操作的类型,包含以下五种类型
类型名称 | 类型功能 | 解析 | 例子 |
---|---|---|---|
cv2.THRESH_BINARY | 超过阈值的部分取maxval(最大值),否则取0 | 大于thresh的值取maxval | 越亮取maxval,较暗取为0黑——亮变白,暗变0黑 |
cv2.THRESH_BINARY_INV | 不超过阈值的部分取maxval(最大值),否则取0 | THRESH_BINARY的反转方法 | 小于thresh的值取maxval——暗变白,亮变0黑 |
cv2.THRESH_TRUNC | 大于阈值部分设置为阈值,否则不变 | 最大的最亮的也只能是thresh阈值 | 亮的地方变thresh阈值,暗的地方不变 |
cv2.THRESH_TOZERO | 大于阈值部分不变,否则设为0 | 大于阈值的不变,小于等于阈值的为0 | 亮的地方不变,暗的地方变0黑 |
cv2.THRESH_TOZERO_INV | 小于阈值部分不变,否则设为0 | 小于等于阈值的不变,大于阈值的为0 | 暗的不变,亮的变0暗 |