日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

distanceTransform函数

發(fā)布時間:2025/4/16 编程问答 6 豆豆
生活随笔 收集整理的這篇文章主要介紹了 distanceTransform函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

distanceTransform函數(shù)

函數(shù)的作用:

主要用于計算非零像素到最近零像素點的最短距離。一般用于求解圖像的骨骼。。。。

函數(shù)調(diào)用形式:

C++:?void?distanceTransform(InputArray?src, OutputArray?dst, int?distanceType, int?maskSize)

參數(shù)詳解:

InputArray?src:輸入的圖像,一般為二值圖像

?OutputArray?dst:輸出的圖像

int?distanceType:所用的求解距離的類型、

It can be?CV_DIST_L1,?CV_DIST_L2?, or?CV_DIST_C

mask_size ?距離變換掩模的大小,可以是?3?或?5.?對?CV_DIST_L1?或?CV_DIST_C?的情況,參數(shù)值被強制設(shè)定為?3,?因為?3×3?mask?給出?5×5?mask?一樣的結(jié)果,而且速度還更快。?

mask
用戶自定義距離情況下的 mask。 在 3×3 mask 下它由兩個數(shù)(水平/垂直位量,對角線位移量)組成, 5×5 mask 下由三個數(shù)組成(水平/垂直位移量,對角位移和 國際象棋里的馬步(馬走日))

函數(shù) cvDistTransform 二值圖像每一個象素點到它最鄰近零象素點的距離。對零象素,函數(shù)設(shè)置 0 距離,對其它象素,它尋找由基本位移(水平、垂直、對角線或knight's move,最后一項對 5×5 mask 有用)構(gòu)成的最短路徑。 全部的距離被認為是基本距離的和。由于距離函數(shù)是對稱的,所有水平和垂直位移具有同樣的代價 (表示為 a ), 所有的對角位移具有同樣的代價 (表示為 b), 所有的 knight's 移動具有同樣的代價 (表示為 c). 對類型 CV_DIST_C 和 CV_DIST_L1,距離的計算是精確的,而類型 CV_DIST_L2 (歐式距離) 距離的計算有某些相對誤差 (5×5 mask 給出更精確的結(jié)果), OpenCV 使用 [Borgefors86] 推薦的值:

CV_DIST_C (3×3):
a=1, b=1
CV_DIST_L1 (3×3):
a=1, b=2
CV_DIST_L2 (3×3):
a=0.955, b=1.3693
CV_DIST_L2 (5×5):
a=1, b=1.4, c=2.1969

下面用戶自定義距離的的距離域示例 (黑點 (0) 在白色方塊中間): 用戶自定義 3×3 mask (a=1, b=1.5)

4.543.533.544.5
432.522.534
3.52.51.511.52.53.5
3210123
3.52.51.511.52.53.5
432.522.534
4.543.533.544.5

用戶自定義 5×5 mask (a=1, b=1.5, c=2)

4.53.53333.54.5
3.5322233.5
321.511.523
3210123
321.511.523
3.5322233.5
43.53333.54

典型的使用快速粗略距離估計 CV_DIST_L2, 3×3 mask , 如果要更精確的距離估計,使用 CV_DIST_L2, 5×5 mask。

圖像的距離變換被定義為一幅新的圖像,該圖像的每個輸出像素被設(shè)成與輸入像素中0像素最近的距離。顯然,典型
的距離變換的輸入應(yīng)為某些邊緣圖像。在多數(shù)應(yīng)用中,距離變換的輸入是例如Canny 邊緣檢測的檢測圖像的轉(zhuǎn)換輸
出(即邊緣的值是0,非邊緣的是非0)。

opencv代碼:


<span style="font-size:18px;">#include<cv.h> #include<highgui.h> #pragma comment(lib, "cv.lib") #pragma comment(lib, "cxcore.lib") #pragma comment(lib, "highgui.lib")int main() { IplImage* src = cvLoadImage ("test.png", 1); IplImage* dst = cvCreateImage (cvGetSize(src), IPL_DEPTH_32F, 1); IplImage* canny = cvCreateImage (cvGetSize(src), IPL_DEPTH_8U, 1); cvCvtColor (src, canny, CV_RGB2GRAY); cvCanny (canny, canny, 100, 200, 3); cvDistTransform (canny, dst, CV_DIST_WELSCH, 3); cvNamedWindow ("src", 1); cvShowImage ("src", src); cvNamedWindow ("dist", 1); cvShowImage ("dist", canny); cvWaitKey (0); cvReleaseImage (&src); cvReleaseImage (&canny); cvReleaseImage (&dst); return 0; } </span>

總結(jié)

以上是生活随笔為你收集整理的distanceTransform函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。