區域性自適應閾值則是根據畫素的鄰域塊的畫素值分布來確定該畫素位置上的二值化閾值。這樣做的好處在於每個畫素位置處的二值化閾值不是固定不變的,而是由其周圍鄰域畫素的分布來決定的。亮度較高的影象區域的二值化閾值通常會較高,而亮度較低的影象區域的二值化閾值則會相適應地變小。不同亮度、對比度、紋理的區域性影象區域將會擁有相對應的區域性二值化閾值。常用的區域性自適應閾值有:1)區域性鄰域塊的均值;2)區域性鄰域塊的高斯加權和。
void adaptivethreshold(srcgray,dstimage,maxval,adaptivemethod,thresholdtype,blocksize,
constvalue);
maxval:預設最大值,使用 cv_thresh_binary 和 cv_thresh_binary_inv 的最大值.
adaptivemethod:自適應閾值演算法選擇,自適應閾值演算法使用:cv_adaptive_thresh_mean_c 或 cv_adaptive_thresh_gaussian_c .
thresholdtype:閾值型別,必須是cv_thresh_binary或者cv_thresh_binary_inv
blocksize:閾值的象素鄰域大小: 3, 5, 7, ...
對於max_value中的兩個方式中的t是為每乙個象素點單獨計算的閾值,即每個畫素點的閾值都是不同的,就是將該畫素點周圍b*b區域內的畫素加權平均然後減去乙個常數param,從而得到該點的閾值。b由block_size指定,常數由param1指定
對方法 cv_adaptive_thresh_mean_c,先求出塊中的均值,再減掉param。
對方法 cv_adaptive_thresh_gaussian_c ,那麼區域中(x,y)周圍的畫素根據高斯函式按照他們離中心點的距離進行加權計算, 再減掉param。
int main(int argc, char** ar**)
// 全域性二值化
int th = 100;//閾值
mat global;
threshold(image, global, th, 255, cv_thresh_binary_inv);
// 區域性二值化
int blocksize = 7;
int constvalue = 11;
mat local;
adaptivethreshold(image, local, 255, cv_adaptive_thresh_mean_c, cv_thresh_binary_inv, blocksize, constvalue);
imshow("globalthreshold", global);
imshow("localthreshold", local);
waitkey(0);
return 0;
}
OpenCV 閾值處理 二 自適應閾值
因此在同一副影象上的不同區域採用的是不同的閾值,從而使我們能在亮度不同的情況下得到更好的結果。自適應閾值函式 dst cv.adaptivethreshold src,maxvalue,adaptivemethod,thresholdtype,blocksize,c dst 引數 src 8位單通道...
OpenCV使用全域性閾值和自適應閾值
1 均值法 2 otsu 3 三角法 include include using namespace cv using namespace std intmain int argc,char ar namedwindow image window freeratio imshow image src...
opencv函式系列 自適應閾值
在影象處理中較為常用的二值化方法有 1 全域性固定閾值 2 區域性自適應閾值 3 otsu等。全域性固定閾值很容易理解,就是對整幅影象都是用乙個統一的閾值來進行二值化。區域性自適應閾值則是根據畫素的鄰域塊的畫素值分布來確定該畫素位置上的二值化閾值。這樣做的好處在於每個畫素位置處的二值化閾值不是固定不...