OpenCV二值化方法

2021-06-22 18:26:31 字數 1953 閱讀 4338

cvthreshold是opencv庫中的乙個函式

作用:函式 cvthreshold 對單通道陣列應用固定閾值操作。該函式的典型應用是對灰度影象進行閾值操作得到二值影象。(cvcmps 也可以達到此目的) 或者是去掉雜訊,例如過濾很小或很大象素值的影象點。本函式支援的對影象取閾值的方法由 threshold_type 確定。

形式:void cvthreshold( const cvarr* src, cvarr* dst, double threshold, double max_value, int threshold_type );

src:原始陣列 (單通道 , 8-bit of 32-bit 浮點數)。dst:輸出陣列,必須與 src 的型別一致,或者為 8-bit。

threshold:閾值

max_value:使用 cv_thresh_binary 和 cv_thresh_binary_inv 的最大值。

本函式支援的對影象取閾值的方法由 threshold_type 確定:

threshold_type=cv_thresh_binary:

dst(x,y) = max_value, if src(x,y)>threshold 0, otherwise.

threshold_type=cv_thresh_binary_inv:

dst(x,y) = 0, if src(x,y)>threshold; dst(x,y) = max_value, otherwise.

threshold_type=cv_thresh_trunc:

dst(x,y) = threshold, if src(x,y)>threshold;   dst(x,y) = src(x,y), otherwise.

threshold_type=cv_thresh_tozero:

dst(x,y) = src(x,y), if (x,y)>threshold ;  dst(x,y) = 0, otherwise.

threshold_type=cv_thresh_tozero_inv:

dst(x,y) = 0, if src(x,y)>threshold ;  dst(x,y) = src(x,y), otherwise.

值得一說的是threshold_type可以使用cv_thresh_otsu型別,這樣該函式就會使用大律法otsu得到的全域性自適應閾值來進行二值化,而引數中的threshold不再起        作用。比如:cvthreshold( dst, dst,300 , 255,   cv_thresh_otsu | cv_thresh_binary_inv);這種方法對於灰度直方圖呈現二峰特徵的處理起來效果很好。當然你也可以使用已有的otsu演算法來計算該閾值。如下:

int otsu(const iplimage *src_image) //大津法求閾值

; float pixel_pro[256]=;

int threshold = 0;

uchar* data = (uchar*)src_image->imagedata;

//統計每個灰度級中畫素的個數

for(int i = 0; i < src_image->height; i++) }

cout<<"平均灰度:"width )width );

} //遍歷灰度級[0,255],尋找合適的threshold

for(int i = 0; i < 256; i++)

else //前景部分

}u0 = u0_temp / w0;

u1 = u1_temp / w1;

delta_temp = (float)(w0 *w1* pow((u0 - u1), 2)) ;

if(delta_temp > delta_max)

}return threshold;

}

OpenCV二值化方法

cvthreshold是opencv庫中的乙個函式 作用 函式 cvthreshold 對單通道陣列應用固定閾值操作。該函式的典型應用是對灰度影象進行閾值操作得到二值影象。cvcmps 也可以達到此目的 或者是去掉雜訊,例如過濾很小或很大象素值的影象點。本函式支援的對影象取閾值的方法由 thresh...

OpenCV二值化方法

cvthreshold是opencv庫中的乙個函式 作用 函式 cvthreshold 對單通道陣列應用固定閾值操作。該函式的典型應用是對灰度影象進行閾值操作得到二值影象。cvcmps 也可以達到此目的 或者是去掉雜訊,例如過濾很小或很大象素值的影象點。本函式支援的對影象取閾值的方法由 thresh...

OpenCV全域性二值化和區域性二值化原理

thresh otsu最適用於雙波峰。thresh 最適用於單個波峰。它是計算乙個閾值 臨界值 的演算法。先計算影象的灰度直方圖,假設灰度值的均值是130,稱這個均值為m,現在任意選取乙個灰度值t,則可以將直方圖分成前後倆部分,稱這倆部分分別為a和b,這倆部分各自的平均值成為ma和mb。a部分裡的畫...