小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

OpenCV筆記:DistTransform的使用方法

 昵稱9509713 2015-04-01
DistTransform

計算輸入圖像的所有非零元素對其最近零元素的距離

void cvDistTransform( const CvArr* src, CvArr* dst, int distance_type=CV_DIST_L2,
int mask_size=3, const float* mask=NULL );
src 
輸入 8-比特、單通道 (二值) 圖像. 
dst 
含計算出的距離的輸出圖像(32-比特、浮點數(shù)、單通道). 
distance_type 
距離類型; 可以是 CV_DIST_L1, CV_DIST_L2, CV_DIST_C 或 CV_DIST_USER. 
mask_size 
距離變換掩模的大小,可以是 3 或 5. 
對 CV_DIST_L1 或 CV_DIST_C 的情況,參數(shù)值被強制設定為 3, 因為 3×3 mask 給出 5×5 mask 一樣的結果,而且速度還更快。 
mask 
用戶自定義距離情況下的 mask。 在 3×3 mask 下它由兩個數(shù)(水平/垂直位量,對角線位移量)組成, 5×5 mask 下由三個數(shù)組成(水平/垂直位移量,對角位移和 國際象棋里的馬步(馬走日)) 
函數(shù) cvDistTransform 二值圖像每一個象素點到它最鄰近零象素點的距離。對零象素,函數(shù)設置 0 距離,對其它象素,它尋找由基本位移(水平、垂直、對角線或knight's move,最后一項對 5×5 mask 有用)構成的最短路徑。 全部的距離被認為是基本距離的和。由于距離函數(shù)是對稱的,所有水平和垂直位移具有同樣的代價 (表示為 a ), 所有的對角位移具有同樣的代價 (表示為 b), 所有的 knight's 移動具有同樣的代價 (表示為 c). 對類型 CV_DIST_C 和 CV_DIST_L1,距離的計算是精確的,而類型 CV_DIST_L2 (歐式距離) 距離的計算有某些相對誤差 (5×5 mask 給出更精確的結果), 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.5   4.0   3.5   3.0   3.5   4.0   4.5 
4.0   3.0   2.5   2.0   2.5   3.0   4.0
3.5   2.5   1.5   1.0   1.5   2.5   3.5 
3.0   2.0   1.0   0.0   1.0   2.0   3.0 
3.5   2.5   1.5   1.0   1.5   2.5   3.5 
4.0   3.0   2.5   2.0    2.5  3.0   4.0 
4.5   4.0   3.5   3.0    3.5  4.0   4.5

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

4.5   3.5   3.0    3.0   3.0   3.5   4.5 
3.5   3.0   2.0    2.0   2.0   3.0   3.5 
3.0   2.0   1.5    1.0   1.5   2.0   3.0 
3.0   2.0   1.0    0.0   1.0   2.0   3.0 
3.0   2.0   1.5    1.0   1.5   2.0   3.0 
3.5   3.0   2.0    2.0   2.0   3.0   3.5 
4.0   3.5   3.0    3.0   3.0   3.5   4.0

先做參數(shù)為100,200的canny轉化后計算出結果按照learning opencv書上結果應該是像噴墨了一樣。 

 IplImage* src = cvLoadImage("./lena.jpg");
 IplImage* dst = cvCreateImage( cvGetSize(src), IPL_DEPTH_32F,1);
 IplImage* color_dst = cvCreateImage( cvGetSize(src), 8, 1 );
 IplImage* temp=cvCreateImage(cvGetSize(src),8,1);
 cvCvtColor(src, color_dst, CV_BGR2GRAY);  
 cvCanny(color_dst,temp,100,200);
 cvDistTransform(color_dst,dst,CV_DIST_L2,5);
 cvNamedWindow( "Source", 1 );
 cvShowImage( "Source", src );
 cvNamedWindow( "dst", 1 );
 cvShowImage( "dst", dst);
 cvNamedWindow( "temp", 1 );
 cvShowImage( "temp", temp);
 cvWaitKey(0);
 return 0; 


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約