cv2.threshold()函數的做用是將一幅灰度圖二值化,基本用法以下:算法
#ret:暫時就認爲是設定的thresh閾值,mask:二值化的圖像函數
ret,mask = cv2.threshold(img2gray,175,255,cv2.THRESH_BINARY)spa
plt.imshow(mask,cmap='gray')blog
上面代碼的做用是,將灰度圖img2gray中灰度值小於175的點置0,灰度值大於175的點置255。class
具體用法以下:map
threshold(src, thresh, maxval, type[, dst])->ret,dst方法
src::灰度圖im
thresh:閾值d3
maxval:最大值img
type:閾值類型
對於最後一個參數,常見的閾值類型有:
THRESH_BINARY=0,THRESH_BINARY_INV,THRESH_TRUNC,THRESH_TOZERO,THRESH_TOZERO_INV,THRESH_OTSU,THRESH_TRIANGLE,THRESH_MASK
他們的做用參見下表:
threshold函數有兩個返回值,其中第二個返回值(這裏是mask)是二值化後的灰度圖。當咱們指定了閾值參數thresh,第一個返回值ret就是咱們指定的thresh。換句話說,咱們能夠不指定閾值參數thresh。
一般狀況,咱們通常不知道設定怎樣的閾值thresh才能獲得比較好的二值化效果,只能去試。如對於一幅雙峯圖像(理解爲圖像直方圖中存在兩個峯),咱們指定的閾值應儘可能在兩個峯之間的峯谷。這時,就能夠用第四個參數THRESH_OTSU,它對一幅雙峯圖像自動根據其直方圖計算出合適的閾值(對於非雙峯圖,這種方法獲得的結果可能不理想)。
對於雙峯圖,咱們須要多傳入一個參數cv2.THRESH_OTSU,而且把閾值thresh設爲0,算法會找到最優閾值,並做爲第一個返回值ret返回。
cv2.THRESH_OTSU參數用法以下: