opencv python筆記 閾值二值化

2021-09-25 00:04:38 字數 1702 閱讀 1919

cv2.threshold(img, threshold, maxval,type)

img,就是原影象,原影象應是灰度圖。

threshold,就是用來對畫素值分類的閾值。

maxval,就是當畫素值高於(有時是小於)閾值時應該被賦予的新的畫素值。

函式有兩個返回值,第乙個為retval,我們後面會解釋。第二個就是閾值化之後的結果影象了。

在前面的部分我們使用是全域性閥值,整幅影象採用同乙個數作為閾值。當時這種方法並不適應與所有情況,尤其是當同一幅影象上的不同部分的具有不同亮度時。這種情況下我們需要採用自適應閾值。此時的閾值是根據影象上的每乙個小區域計算與其對應的閾值。因此在同一幅影象上的不同區域採用的是不同的閾值,從而使我們能在亮度不同的情況下得到更好的結果。

dst = cv2.adaptivethreshold(src, maxval, thresh_type, type, block size, c)
src: 輸入圖,只能輸入單通道影象,通常來說為灰度圖

dst: 輸出圖

maxval: 當畫素值超過了閾值(或者小於閾值,根據type來決定),所賦予的值

thresh_type: 閾值的計算方法,包含以下2種型別:cv2.adaptive_thresh_mean_c; cv2.adaptive_thresh_gaussian_c.(效果更好)

type:二值化操作的型別,與固定閾值函式相同,包含以下5種型別: cv2.thresh_binary; cv2.thresh_binary_inv; cv2.thresh_trunc; cv2.thresh_tozero;cv2.thresh_tozero_inv.

block size: 中分塊的大小(必須是奇數)

c :閾值計算方法中的常數

一般來說,在平均自適應閾值和高斯自適應閾值之間進行選擇需要在您的最後進行一些實驗。要改變的最重要的引數是鄰域大小和c,即從平均值中減去的值。通過試驗這個值,你將能夠顯著地改變你的閾值的結果。

在使用全域性閾值時,我們就是隨便給了乙個數來做閾值,那我們怎麼知道我們選取的這個數的好壞呢?答案就是不停的嘗試。如果是一副雙峰影象(簡單來說雙峰影象是指影象直方圖中存在兩個峰)呢?我們豈不是應該在兩個峰之間的峰谷選乙個值作為閾值?這就是otsu二值化要做的。簡單來說就是對一副雙峰影象自動根據其直方圖計算出乙個閾值。(對於非雙峰影象,這種方法得到的結果可能會不理想)

1、otsu二值化

ret,th3=cv.threshold(src,0,255,cv.thresh_binary+cv.thresh_otsu)
第二個引數,閾值設定為0

第四個引數+cv.thresh_otsu

最優閾值就是返回值 ret

2、先使用乙個5x5的高斯核除去噪音,然後再使用otsu二值化。

blur = cv.gaussianblur(src,(5,5),0)

ret,th4= cv.threshold(blur,0,255,cv.thresh_binary+cv.thresh_otsu)

閾的粵語發音 閾 閾的意思 閾的解釋

基本字義 閾 閾 y 1 門坎 立不中門,行不履閾 2 界限 視閾。聽閾。詳細字義 閾閾 y 名 1 門檻 threshold 閾,門榍也。說文 閾,門限也。玉篇 柣謂之閾。爾雅 注 閾,門限。不踐閾。禮記 曲禮 賓入不中門,不履閾。禮記 玉藻 見兄弟不逾閾。左傳 僖公二十二年 思不出乎門閾。漢書 ...

opencv python學習筆記八

十 影象上的算術運算 常用運算有 加法 減法 位運算 cv2.add cv2.addweighted 函式原型 defadd src1,src2,dst none,mask none,dtype none defaddweighted src1,第乙個原陣列 alpha,第乙個原陣列的權值 src2...

opencv python學習筆記十一

14 幾何變換 移動,旋轉 仿射變換 常用函式 cv2.getperspectivetransform 函式原型 defgetperspectivetransform src,dst cv2.warpaffine 函式原型,接收 2 3的矩陣 defwarpaffine src,輸入源影象 m,透視...