opencv-python圖像二值化函數cv2.threshold函數詳解及參數cv2.THRESH_OTSU使用


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

 

他們的作用參見下表:

 

 

 

 

 

threshold函數有兩個返回值,其中第二個返回值(這里是mask)是二值化后的灰度圖。當我們指定了閾值參數thresh,第一個返回值ret就是我們指定的thresh。換句話說,我們可以不指定閾值參數thresh。

 

通常情況,我們一般不知道設定怎樣的閾值thresh才能得到比較好的二值化效果,只能去試。如對於一幅雙峰圖像(理解為圖像直方圖中存在兩個峰),我們指定的閾值應盡量在兩個峰之間的峰谷。這時,就可以用第四個參數THRESH_OTSU,它對一幅雙峰圖像自動根據其直方圖計算出合適的閾值(對於非雙峰圖,這種方法得到的結果可能不理想)。

 

對於雙峰圖,我們需要多傳入一個參數cv2.THRESH_OTSU,並且把閾值thresh設為0,算法會找到最優閾值,並作為第一個返回值ret返回。

 

cv2.THRESH_OTSU參數用法如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM