閾值化(二值化)--OpenCV10

閾值化可以被視爲最簡單的圖像分割方法。比如,從一幅圖像中利用閾值分割出我們所需要的物體部分。

這樣的圖像分割方法基於圖像中物體與背景之間的灰度差異,而且此分割屬於像素級的分割。

Threshold()和adaptiveThreshold()函數可以這樣的操作。

他們的思路爲:給定一個閾值和圖像數組,然後根據數組中的每個元素的值是高於還是低於閾值而進行處理。

 

固定閾值函數Threshold()

CV_EXPORTS_W double threshold( InputArray src, OutputArray dst,
                               double thresh, double maxval, int type );

需要注意的是 輸入進去的src原圖圖像只能是單通道圖像 即轉爲灰度在輸入

第三個參數爲固定的閾值 ,第四個參數爲閾值的最大值,第五個參數即爲選擇取閾值的方法。

        THRESH_BINARY = 0,
        THRESH_BINARY_INV = 1,
        THRESH_TRUNC = 2,
        THRESH_TOZERO = 3,
        THRESH_TOZERO_INV = 4,

第一個即最基本的二值化,圖像元素大於閾值則直接取最大值反之爲0 ,

第二個方法則把第一個方法反了一下,大於閾值的時候取0

......

 

自適應閾值操作:adaptiveThreshold()函數

CV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,
                                     double maxValue, int adaptiveMethod,
                                     int thresholdType, int blockSize, double C );

第三個參數 maxValue 爲給像素賦滿足條件的非零0

第四個參數 自適應閾值方法有兩種

ADAPTIVE_THRESH_MEAN_C   ADAPTIVE_THRESH_GAUSSIAN_C 

第五個參數 閾值的類型 取值必須爲 THRESH_BINARY或THRESH_BINARY_INV

第六個參數計算閾值大小的一個鄰域尺寸 取值爲 3 5 7 ....奇數

第七個參數 double類型的C 減去平均或加權平均值後的常數值。通常爲正數,少數情況下也可爲0或複數

adaptiveThreshold(Img1, BinaryImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 101, 4);

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章