輪廓 邊緣 邊界的相關函式

2021-07-10 23:29:22 字數 1863 閱讀 2993

opencv裡支援很多邊緣提取的辦法,可是如何在一幅影象裡得到輪廓區域的引數呢,這就需要用到findcontours函式,這個函式的原型為:

//c++:   

void findcontours(inputoutputarray image, outputarrayofarrays contours, outputarray hierarchy, int mode, int method, point offset=point())

void findcontours(inputoutputarray image, outputarrayofarrays contours, int mode, int method, point offset=point())

這裡介紹下該函式的各個引數:

輸入影象image必須為乙個2值單通道影象

contours引數為檢測的輪廓陣列,每乙個輪廓用乙個point型別的vector表示

hiararchy引數和輪廓個數相同,每個輪廓contours[ i ]對應4個hierarchy元素hierarchy[ i ][ 0 ] ~hierarchy[ i ][ 3 ],分別表示後乙個輪廓、前乙個輪廓、父輪廓、內嵌輪廓的索引編號,如果沒有對應項,該值設定為負數。

mode表示輪廓的檢索模式

cv_retr_external表示只檢測外輪廓

cv_retr_list檢測的輪廓不建立等級關係

cv_retr_ccomp建立兩個等級的輪廓,上面的一層為外邊界,裡面的一層為內孔的邊界資訊。如果內孔內還有乙個連通物體,這個物體的邊界也在頂層。

cv_retr_tree建立乙個等級樹結構的輪廓。具體參考contours.c這個demo

method為輪廓的近似辦法

offset表示代表輪廓點的偏移量,可以設定為任意值。對roi影象中找出的輪廓,並要在整個影象中進行分析時,這個引數還是很有用的。

具體應用參考sample資料夾下面的squares.cpp這個demo

contourarea函式可以得到當前輪廓包含區域的大小,方便輪廓的篩選

findcontours經常與drawcontours配合使用,用來將輪廓繪製出來。其中第乙個引數image表示目標影象,第二個引數contours表示輸入的輪廓組,每一組輪廓由點vector構成,第三個引數contouridx指明畫第幾個輪廓,如果該引數為負值,則畫全部輪廓,第四個引數color為輪廓的顏色,第五個引數thickness為輪廓的線寬,如果為負值或cv_filled表示填充輪廓內部,第六個引數linetype為線型,第七個引數為輪廓結構資訊,第八個引數為maxlevel

得到了複雜輪廓往往不適合特徵的檢測,這裡再介紹乙個點集凸包絡的提取函式convexhull,輸入引數就可以是contours組中的乙個輪廓,返回外凸包絡的點集

還可以得到輪廓的外包絡矩形,使用函式boundingrect,如果想得到旋轉的外包絡矩形,使用函式minarearect,返回值為rotatedrect;也可以得到輪廓的外包絡圓,對應的函式為minenclosingcircle;想得到輪廓的外包絡橢圓,對應的函式為fitellipse,返回值也是rotatedrect,可以用ellipse函式畫出對應的橢圓

如果想根據多邊形的輪廓資訊得到多邊形的多階矩,可以使用類moments,這個類可以得到多邊形和光柵形狀的3階以內的所有矩,類內有變數m00,m10,m01,m20,m11,m02,m30,m21,m12,m03,比如多邊形的質心為 x = m10 / m00,y = m01 / m00。

如果想獲得一點與多邊形封閉輪廓的資訊,可以呼叫pointpolygontest函式,這個函式返回值為該點距離輪廓最近邊界的距離,為正值為在輪廓內部,負值為在輪廓外部,0表示在邊界上。

**

邊界輪廓提取(邊緣提取)例項

邊緣提取,指數字影象處理中,對於輪廓的乙個處理。對於邊界處,灰度值變化比較劇烈的地方,就定義為邊緣。也就是拐點,拐點是指函式發生凹凸性變化的點。二階導數為零的地方。並不是一階導數,因為一階導數為零,表示是極值點。邊緣提取 邊緣檢測的基本思想首先是利用邊緣增強運算元,突出影象中的區域性邊緣,然後定義象...

輪廓邊緣的學習與優化

分割時,對於置信度不高的畫素,能否單獨處理?首先,確定其方向,找到其對應的內部畫素,用內部畫素代替該畫素 學習邊界到內部點的方向 文獻概述 level set for segmentation 1,14,53,31 角度回歸 devil is in the edges learning semant...

邊緣計算ENS 拓展雲的邊界

摘要 在9月19日下午的杭州雲棲大會飛天技術匯 cdn與邊緣計算專場中,阿里雲邊緣計算團隊的高階技術專家王廣芳,從邊緣計算的定義 場景的需求和挑戰 ens產品的價值及能力,以及典型的應用場景和案例等幾個方面,詳細解讀了阿里雲對於邊緣計算的理解。在9月19日下午的杭州雲棲大會飛天技術匯 cdn與邊緣計...