【Opencv–adaptiveThreshold】自適應(yīng)閾值圖像二值化
1. 介紹
在這里 cv2.threshold函數(shù) 介紹了普通的opencv圖像閾值處理函數(shù)。但threshold 的圖像閾值處理對于某些光照不均的圖像,這種全局閾值分割的方法并不能得到好的效果。
圖像閾值化操作中,我們更關(guān)心的是從二值化圖像中分離目標區(qū)域和背景區(qū)域,僅僅通過固定閾值很難達到理想的分割效果。在圖片中的灰度是不均勻的,所以通常情況下圖片中不同區(qū)域的閾值是不一樣的。這樣就需要一種方法根據(jù)圖像不同區(qū)域亮度或灰度分布,計算其局部閾值來進行閾值處理。這種方法就是自適應(yīng)閾值化圖像處理,實際上這可以稱為局部閾值法,在OpenCV中adaptiveThreshold就是這種方法。
2. adaptiveThreshold函數(shù)
2.1 函數(shù)調(diào)用
import cv2
dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
-
參數(shù)說明:
- src:源圖像,8位的灰度圖。
- maxValue:用于指定滿足條件的像素設(shè)定的灰度值
- adaptiveMethod:使用的自適應(yīng)閾值算法,有2種類型ADAPTIVE_THRESH_MEAN_C算法(局部鄰域塊均值)或ADAPTIVE_THRESH_GAUSSIAN_C(局部鄰域塊高斯加權(quán)和)。
- ADAPTIVE_THRESH_MEAN_C的計算方法是計算出鄰域的平均值再減去第六個參數(shù)C的值;
- ADAPTIVE_THRESH_GAUSSIAN_C的計算方法是計算出鄰域的高斯均勻值再減去第六個參數(shù)C的值。
- 處理邊界時使用BORDER_REPLICATE | BORDER_ISOLATED模式。
- thresholdType:閾值類型,只能是THRESH_BINARY或THRESH_BINARY_INV二者之一,具體參考上面“圖像閾值處理”的表格
- blockSize:表示鄰域塊大小,用來計算區(qū)域閾值,一般選擇3、5、7……
- C:表示常數(shù),它是一個從均勻或加權(quán)均值提取的常數(shù),通常為正數(shù),但也可以是負數(shù)或零
-
返回值:
- dst:處理后的圖像
2.2 補充說明
- 亮度較高的圖像區(qū)域的二值化閾值通常會較高,而亮度較低的圖像區(qū)域的二值化閾值則會相適應(yīng)地變小。
- 在灰度圖像中,灰度值變化明顯的區(qū)域往往是物體的輪廓,所以將圖像分成一小塊一小塊的去計算閾值往往會得出圖像的輪廓。因此函數(shù)adaptiveThreshold除了將灰度圖像二值化,也可以進行邊緣提取。
- 之所以能進行邊緣提取,是因為當block很小時,如block_size=3 or 5 or 7時,“自適應(yīng)”的程度很高,即容易出現(xiàn)block里面的像素值都差不多,這樣便無法二值化,而只能在邊緣等梯度大的地方實現(xiàn)二值化,結(jié)果顯得它是邊緣提取函數(shù)。
- 當把blockSize設(shè)為比較大的值時,如blockSize=21 or 31 or 41時,adaptiveThreshold便是二值化函數(shù)
- blockSize必須為大于1的奇數(shù)(這里解釋一下,size為偶數(shù)的話,該block的中心點就不確定了,因此為奇數(shù)。)
- 如果使用平均值方法,平均值mean為180,差值delta為10,maxValue設(shè)為255。那么灰度小于170的像素為0,大于等于170的像素為255,如果是反向二值化,灰度小于170的像素為255,大于等于170的像素為0。
3. 代碼示例
import cv2
img = cv2.imread('ori.jpg', 0)
img1 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 3, 5)
cv2.imwrite("new1.jpg", img1)
img2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 31, 5)
cv2.imwrite("new1.jpg", img2)
4. 效果
4.1 原圖(ori.img)
4.2 處理后
- new1.img
- new2.jpg
可以看到,文章來源:http://www.zghlxwxcb.cn/news/detail-722863.html
- 當blockSize小時,輪廓識別效果明顯,突出邊緣區(qū)域。
- 而blockSize大時,就是一個二值化圖像。
5. 參考
【1】https://blog.csdn.net/LaoYuanPython/article/details/108558834文章來源地址http://www.zghlxwxcb.cn/news/detail-722863.html
到了這里,關(guān)于【Opencv--自適應(yīng)圖像二值化】cv2.adaptiveThreshold()的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!