距離變換實現影象的每個畫素到最近前景目標或到影象邊界的距離,距離變換的步驟如下:
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...