opencv二值图像分割——python
1. 二值圖像
圖像二值化( Image Binarization)就是將圖像上的像素點的灰度值設置為0或255,也就是將整個圖像呈現出明顯的黑白效果的過程。
2. 全局閾值
cv2.threshold(src, thresholdValue, maxVal, thresholdingTechnique)
src:輸入灰度圖像數組。
thresholdValue:提及用于對像素值進行分類的值。
maxVal:如果像素值大于(有時小于)閾值,則給出的值。
thresholdingTechnique:要應用的閾值類型。
有5種不同的簡單閾值技術是:
cv2.THRESH_BINARY:如果像素強度大于設置的閾值,則將值設置為 255,否則設置為 0(黑色)。
cv2.THRESH_BINARY_INV:cv2 的反轉或相反情況。
cv2.THRESH_TRUNC:如果像素強度值大于閾值,則會將其截斷為閾值。像素值設置為與閾值相同。所有其他值保持不變。
cv2.THRESH_TOZERO:像素強度設置為 0,對于所有像素強度,小于閾值。
cv2.THRESH_TOZERO_INV:cv2 的反轉或相反情況。
ret, th= cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
該方法也被稱為大津法(OTSU)它是根據圖像灰度分布,自動選擇最佳的閾值,按照大津法求得的閾值進行圖像二值化分割后,前景與背景圖像的類間方差最大。適合處理所需提取的前景圖像和背景圖像差距較大的圖像。其函數也十分簡單,只需要把閾值thresh設置為0,然后設置type為cv2.THRESH_BINARY+cv2.THRESH_OTSU,會自動返回一個合適的閾值。
3. 局部閾值
彩色圖像色彩分布不均勻,使用全局閾值處理處理效果較差,通常采用局部閾值來進行分割,局部閾值的處理原理是,針對每一個像素點專門配置一個閾值來進行處理,這些閾值就構成了和原圖像維度相同的矩陣。
cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
src:灰度化的圖片
maxValue:滿足條件的像素點需要設置的灰度值
adaptiveMethod:自適應方法。有2種分別是均值和高斯加權:ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C,建議使用高斯加權和。
thresholdType:二值化方法,可以設置為THRESH_BINARY或者THRESH_BINARY_INV
blockSize:分割計算的區域大小,取奇數
C:常數,每個區域計算出的閾值的基礎上在減去這個常數作為這個區域的最終閾值,可以為負數
dst:輸出圖像,可選
4. 使用建議
灰度圖像使用全局閾值分割:大津法 > 普通全局閾值
彩色圖像使用局部閾值分割
總結
以上是生活随笔為你收集整理的opencv二值图像分割——python的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏与App应用开发者收款结汇方式(涉及
- 下一篇: 资料素材