TShopping

 找回密碼
 註冊
搜索
查看: 121|回復: 0

[教學] cv2影象二值化函式threshold函式詳解及引數cv2.THRESH_OTSU使用

[複製鏈接]
發表於 2021-3-24 22:21:58 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk  
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

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



效果如下:

cv2 二值化 threshold THRESH_OTSU

cv2 二值化 threshold THRESH_OTSU

文章出處

 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2021-4-13 09:45 , Processed in 0.058639 second(s), 24 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表