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