OpenCV中圖像閾值處理有兩個函數,cvThreshold和cvAdaptiveThreshold。圖像處理中可能最重要的一步就是圖像的二值化處理,既然需要將圖像二之化,那么就不得不使用這兩個函數。
1. cvThreshold
函數原型如下:
double cvThreshold( const void* srcarr, void* dstarr, double thresh, double maxval, int type );
srcarr源數組,dstarr為目標數組,thresh為閾值,maxval為欲設最大值,type為閾值處理的類型,有如下幾種:
CV_THRESH_BINARY,表示dsti=(srci>T)?M:0。
CV_THRESH_BINARY_INV,表示dsti=(srci>T)?0:M。
CV_THRESH_TRUNC,表示dsti=(srci>T)?M:srci。
CV_THRESH_TOZERO_INV,表示dsti=(srci>T)?0:srci。
CV_THRESH_TOZERO,表示dsti=(srci>T)?srci:0。
可能這樣還是不能直觀的看出我們實際使用中到底選擇哪一種類型,不要着急:
最上面的一個圖是將要被閾值處理值和閾值圖,下面5個就是前面的閾值處理的類型。
2. cvAdaptiveThreshold
函數原型如下:
void cvAdaptiveThreshold( const void *srcIm, void *dstIm, double maxValue, int method, int type, int blockSize, double delta );
這個函數同上面那個函數不同的是,上面那個函數需要給出閾值,而這個函數的閾值是不要指定的,它是通過一定計算得來的,稱之為自適應閾值處理。
前兩個參數同cvThreshold的前兩個參數一樣,你甚至可以看到OpenCV中絕大多數函數的前兩個參數都是這樣的,第一個為源,第二個為目標。
第三個參數含義也和cvThreshold中的一樣。
第四個參數有兩種取值:ADAPTIVE_THRESH_MEAN_C和ADAPTIVE_THRESH_GAUSSIAN_C,分別表示對區域內像素采用均值處理和高斯加權處理。
第五個參數也和cvThreshold中的一樣。
第六個參數表示區域大小。
最后一個參數是一個定值。
自適應閾值它是計算區域內的一個值減去一個定值作為閾值,所以說它的閾值是動態計算的。
轉載地址:http://blog.csdn.net/mcgrady_tracy/article/details/7482673