對圖像的閾值操作
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暗 |