閾值化可以被視爲最簡單的圖像分割方法。比如,從一幅圖像中利用閾值分割出我們所需要的物體部分。
這樣的圖像分割方法基於圖像中物體與背景之間的灰度差異,而且此分割屬於像素級的分割。
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);