OpenCV OTSU二值化分割

2021-09-13 03:20:57 字數 1630 閱讀 5920

其實opencv中內建了這個二值化演算法,在threshold方法中

double threshold( inputarray src, outputarray dst, double thresh, double maxval, int type );

/*閾值型別有如下幾種:

0:二進位制閾值化--thresh_binary

1:反二進位制閾值化--thresh_binary_inv

2:截斷閾值化:大於該閾值的畫素點被設定為該閾值--thresh_trunc

3:閾值化為0:低於閾值被設定為0--thresh_tozero

4:反閾值化為0:超過閾值被設定為0--thresh_tozero_inv

8:otsu閾值化--cv_thresh_otsu

*/

引數說明:

第乙個引數:inputarray型別的src,輸入陣列,填單通道,8位或32位浮點型別mat即可。即為輸入影象。

第二個引數:函式運算後的結果存放在這。即為輸出影象(與輸入影象同樣的尺寸和型別)。

第三個引數:double型別的thresh,閾值的具體值。根據需要自行設定。

第四個引數:表示預設最大值,使用thresh_binary或thresh_binary_inv型別。

第五個引數:int型別的type,表示閾值化處理的型別。

otsu的c++實現,需要參考公式 :

效果如下:

float wb, wf; //比重. wb-背景部分; wf-前景部分

float u0_temp, u1_temp, u0, u1; //平均值

float delta_temp; //存放臨時方差

double delta_max = 0.0; //初始化最大類間方差

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

//前景部分

else

}//------------分別計算各類的平均值------------

u0 = u0_temp / wb;

u1 = u1_temp / wf;

//-----------計算最大類間方差------------

delta_temp = (float)(wb*wf*pow((u0 - u1), 2));//形如pow(x,y);其作用是計算x的y次方。

//------------依次找到最大類間方差下的閾值------------

if (delta_temp > delta_max)

}//計算結束

return threshold; //返回otus計算出的閾值

}

ITK基礎 一 二值化分割

itk 全稱為 insight toolkit 是一款開源 跨平台 用於影象分析工具包,開發遵循極限程式設計,主流使用語言為 c 但目前開發團隊已經提供了面向 python 的介面。itk 內部封裝了許多優秀演算法。itk 可用於影象處理 配準 分割等領域,處理影象維度面向二維 三維或者更高維度 原...

氣泡排序的優化 分割字串

氣泡排序在學習c語言時就學習過,但是只是學會了怎麼用,具體對於氣泡排序的優化演算法,一時間無從下手。後來想了想,從人類的邏輯思維下手,如果遇到排好序的數列,直接跳出本次迴圈,能在一定程度上優化 usr bin python3 l2 n int input pls input how many num...

索引優化分析(二)

explain sql語句 explain select from table name查詢結果如下 1 id selectct 查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序 查詢順序 a id相同,執行順序由上至下 b id不同,如果是子查詢,id的序號會遞增,id值越...