作者:翟天保Steven
著作權宣告:著作權歸作者所有,商業轉載請聯系作者獲得授權,非商業轉載請注明出處
函式原型
void adaptiveThreshold( InputArray src, OutputArray dst,
double maxValue, int adaptiveMethod,
int thresholdType, int blockSize, double C );
引數說明
- InputArray型別的src,輸入影像,
- OutputArray型別的dst,輸出影像,
- double型別的maxval,閾值最大值,
- int型別的adaptiveMethod,自適應閾值演算法型別,0為ADAPTIVE_THRESH_MEAN_C(均值法獲取閾值),1為ADAPTIVE_THRESH_GAUSSIAN_C(高斯窗加權和獲取閾值),
- int型別的thresholdType,閾值操作的型別,0為THRESH_BINARY(標準的二值化閾值法,大于thresh的設為maxval,小于的設為0),1為THRESH_BINARY_INV(反向二值化),2為THRESH_TRUNC(截斷閾值法,大于thresh的設為thresh,小于則不變),3為THRESH_TOZERO(零化閾值法,大于thresh的不變,小于則零化),4為THRESH_TOZERO_INV(反向零化),7為THRESH_MASK(沒測驗出來什么用法,都是黑屏),8為THRESH_OTSU(大津演算法,適合雙峰直方圖的影像,通過分析最大的背景前景類間方差,自動調節閾值),16為THRESH_TRIANGLE(三角法,適合單峰直方圖影像,建立谷底和峰頂直線,距離直線垂直距離最大的直方圖位置,即閾值thresh),
- int型別的blockSize,視窗的大小,只能為奇數,
- double型別的C,自適應閾值演算法得到平均值或加權平均值后,再減的常數值,
測驗代碼
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
using namespace cv;
using namespace std;
int main()
{
cv::Mat src = imread("test.jpg",0);
cv::Mat th1,th2;
// 自適應閾值函式
adaptiveThreshold(src, th1, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 7, 5);
adaptiveThreshold(src, th2,255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 5);
imshow("original", src);
imshow("mean", th1);
imshow("gaussian", th2);
waitKey(0);
return 0;
}
測驗效果
該自適應閾值函式可以用來獲取影像邊緣特征,用mean或者gaussian都可以;設定常數C時,若其為正數,相當于視窗內求完平均值再減去C的值為閾值,這樣對那些顏色類似的區域而言,假設C為5,平均值為120,中心值為119,那么閾值為115,中心值大于閾值,即該點顯示為白色;反之,若C為負數,則上圖中背景區域基本就是黑色了~
如果文章幫助到你了,可以點個贊讓我知道,我會很快樂~加油!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/310678.html
標籤:其他
