輪廓查詢及繪製

2022-07-25 05:03:07 字數 1577 閱讀 3476

輪廓查詢是基於影象邊緣提取的基礎尋找物件輪廓的方法,所以邊緣提取的閾值選定會影響最終輪廓發現結果,下圖為提取影象的輪廓效果。

在乙個多邊形邊緣或者內部任意兩個點的連線都包含在多邊形邊界或者內部,包含點集合s中所有點的最小凸多邊形稱為凸包。

首先選擇y方向最低的點作為起始點p0,從p0開始極座標掃瞄,依次新增p1….pn(排序順序是根據極座標的角度大小,逆時針方向)對每個點pi來說,如果新增pi點到凸包中導致乙個左轉向(逆時針方法)則新增該點到凸包, 反之如果導致乙個右轉向(順時針方向)刪除該點從凸包中。下圖中的2在c點已經不符合要求,因為是乙個右拐點。

下圖為凸包的顯示效果:

基於rdp演算法實現,目的是減少多邊形輪廓點數,首先將影象變為二值影象,發現輪廓,找到影象輪廓,使用多邊形不斷逼近輪廓,通過相關api在輪廓點上找到最小包含矩形和圓,旋轉矩形與橢圓。

canny_output輸入影象為邊緣檢測後的影象,非0的畫素被看成1,0的畫素值保持不變,8-bit,contours為全部發現的輪廓物件,3//

45 輪廓繪製:drawcontours(dst, contours, i, color, 2, 8, hierachy, 0, point(0, 0

)); 6//

dst輸出影象 ,contours全部發現的輪廓物件i 輪廓索引號 color 繪製時候顏色。7//

2繪製線寬, 8線的型別line_8, hierachy拓撲結構圖,0,最大層數, 0只繪製當前的,1表示繪製繪製當前及其內嵌的輪,point(0, 0)廓輪廓位移。

89 凸包尋找:convexhull(contours[i], convexs[i], false, true

); 10

//contours[i]為輸入候選點,來自findcontours輪廓查詢, convexs[i]為凸包, false為逆時針方向, true表示返回點個數。

11);

13//

mat(contours[i])為輸入的多邊形序列,contours_ploy[i]輸出的多邊形序列和輸入序列要保持同一種型別。

14//

3為逼近的準確度,true用來設定形成的多邊形是否是閉合的。

1516

獲得最小包圍圓:minenclosingcircle(contours_ploy[i], ccs[i], radius[i]);

17//

輸入曲線的一系列點的集合,ccs[i]為輸出點的集合,radius[i]為半徑序列。

OpenCV之查詢並繪製輪廓

在opencv中,用findcontours 函式從二值圖中查詢輪廓。原型 void findcontourd inputarray image,outputarray contours,outputarray hierarchy,int mode,int mrthod,point offset p...

opencv之輪廓的查詢與繪製

1 什麼是輪廓 輪廓可以簡單的認為是將連續的點 連著邊界 連在一起的曲線,具有相同的顏色或者灰度,提取輪廓就是提取這些具有相同顏色或者灰度的曲線,或者說是連通域,輪廓在形狀分析和物體的檢測和識別中非常有用 注意事項 1.為了更加準確,要使用二值化影象,在尋找輪廓之前,要進行閾值化處理或者canny邊...

查詢並繪製輪廓 OpenCV 筆記XX

好久沒有更新了,原諒自己放了個假最近又在趕進度,所以。更新的內容是很靠後的第八章,因為最近工作要用就先跳了,後面會更新筆記編號。加油加油!在二值影象中尋找輪廓 void cv findcontours inputoutputarray image,outputarrayofarrays contou...