OpenCV 距離變換實現

2021-08-15 14:29:30 字數 1460 閱讀 2723

距離變換實現影象的每個畫素到最近前景目標或到影象邊界的距離,距離變換的步驟如下:

1.將影象進行二值化,子影象值為0,背景為255;

2.利用maskl從左向右,從上到下掃瞄,p點是當前畫素點,q點是maskl中鄰域的點,d()為距離計算,包括棋盤距離、城市距離和歐式距離。f(p)為p點的畫素值,計算f(p) = min( f(p),  f(q)+d(p,q) ), 其中,q屬於maskl

3.再利用maskr從右向左,從下向上掃瞄,計算f(p) = min( f(p),  f(q)+d(p,q) ), 其中q屬於maskr

4.f(p) 則為距離變換後的影象。

**實現:

//計算歐式距離

float calceuclideandistance(int x1, int y1, int x2, int y2)

//計算棋盤距離

int calcchessboarddistance(int x1, int y1, int x2, int y2)

//計算街區距離

int calcblockdistance(int x1, int y1, int x2, int y2)

//距離變換函式實現

void distancetrans(cv::mat &image, cv::mat &result)

} //第二遍遍歷影象,用右模板更新影象值

for (int i = rows - 2; i > 0; i--) }

result = imagebinary.clone();

}

執行結果:

opencv距離變換函式:

void distancetransform(inputarray src, outputarray dst, int distancetype, int masksize, int dsttype=cv_32f )
src:輸入矩陣

dst:輸出矩陣

distancetype:距離型別。可以的型別是cv_dist_l1、cv_dist_l2、cv_dist_c(cv_dist_l1街區距離,cv_dist_l2歐幾里得距離,cv_dist_c棋盤距離)。

masksize:距離變換運算時的掩碼大小。值可以是3、5或cv_dist_mask_precise(當distancetype=cv_dist_l1 或 cv_dist_c時,masksize只能為3)

dsttype:輸出影象的型別,可以是cv_8u 或 cv_32f。

**實現:

int main()

執行結果:

opencv3 1 距離變換

distancetransform函式 到邊緣點的距離 黑色的 0 都認為是邊緣 兩種呼叫方式 distancetransform edge,dist,disttype,masksize distancetransform edge,dist,labels,disttype,masksize,lab...

opencv學習筆記(三十六)距離變換

距離變換cvdisttransform 距離變換於1966年被學者首次提出,目前已被廣泛應用於影象分析 計算機視覺 模式識別等領域,人們利用它來實現目標細化 骨架提取 形狀插值及匹配 粘連物體的分離等。距離變換是針對二值影象的一種變換。在二維空間中,一幅二值影象可以認為僅僅包含目標和背景兩種畫素,目...

OpenCV實現仿射變換

乙個任意的仿射變換都能表示為 乘以乙個矩陣 線性變換 接著再 加上乙個向量 平移 綜上所述,我們能夠用仿射變換來表示 旋轉 線性變換 平移 向量加 縮放操作 線性變換 你現在可以知道,事實上,仿射變換代表的是兩幅圖之間的關係.全域性變數 char source window source image...