OpenCV提供了2個函數來處理閾值.ui
第一個函數.net
double threshold(InputArray src, OutputArray dst, double thresh, double maxVal, int thresholdType);
blog
這個函數是使用一個固定的值thresh來分割區間的.能够用來获得2值圖或者濾除噪聲.或者濾除一些很小或很大的值.get
thresholdType有幾種類型能够選擇:
co
THRESH_BINARY 當src(x,y)>thresh時填充maxVal,否則填充0;
block
THRESH_BINARY_INV 當src(x,y)>thresh時填充0,否則填充maxVal;
分割
THRESH_TOZERO 當src(x,y)>thresh時保留原值,否則填充0;
void
THRESH_TOZERO_INV 當src(x,y)>thresh時填充0,否則保留原值;
tar
THRESH_TRUNC和THRESH_OTSU還沒有研究...待以後補充...
第二個函數,自動閾值
void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod,int thresholdType, int blockSize, double C)
這個函數會根據條件對每一個點都計算出一個值,然後根據這個值來判斷最終要填充什麽值.
thresholdType有2個值能够選擇
THRESH_BINARY 當計算出的值>thresh時填充maxVal,否則填充0;
THRESH_BINARY_INV 當計算出的值>thresh時填充0,否則填充maxVal;
adaptiveMethod有2個值能够選擇
ADAPTIVE_THRESH_MEAN_C 使用平均加權的方式計算
ADAPTIVE_THRESH_GAUSSIAN_C 使用高斯函數進行計算.
參數C是一個數值,由adaptiveMethod方式計算出來的值要減去C才能获得最終的值.這個最終的值就是用來判斷要填充什麽值的.因此我們能够將這個值當作一個偏移量來使用.
參數blockSize表示計算的時候使用的矩陣大小,此參數必須是大於1的奇數,例如3,5,7....