opencv2中尋找輪廓

2021-07-11 19:50:06 字數 1413 閱讀 4885

最近想嘗試用opencv做專案,發現需要考慮的細節很多,用商業庫用習慣了,有點不適應,慢慢來吧。

上網查了查用opencv做連通域運算,發現都是先尋找輪廓,那就先來學習下輪廓。

opencv中尋找輪廓的c++函式是

void 

findcontours

(inputoutputarray 

image

, outputarrayofarrays 

contours

, outputarray 

hierarchy

, int 

mode

, int 

method

, point 

offset

=point()

),總共6個引數:

1、inputoutputarray 

image:源影象,8bit單通道,非0畫素認為是1。

2、outputarrayofarrays 

contours:檢測到的輪廓,每個輪廓以點向量儲存。

3、outputarray 

hierarchy:可選的輸出向量,儲存輪廓的拓撲結構。它的元素個數等於輪廓個數。對於每乙個輪廓contour[i],

hierarchy[i][0]對應於同層級下乙個輪廓索引

, hiearchy[i][1]對應於同層級前乙個輪廓的索引

, hiearchy[i][2]對應於第乙個子輪廓索引

,hiearchy[i][3]對應于父輪廓的索引。如果contour[i]沒有父輪廓,那麼hiearchy[3]為負,hiearchy[0~2]一樣。

4、int 

mode:輪廓檢索模式。

cv_retr_external:只檢索最外的輪廓。即內部子輪廓不檢測。

cv_retr_list:檢索所有輪廓,但是不建立層級關係hierarchy。

cv_retr_ccomp:檢索所有輪廓,組織為2級hierarchy。

cv_retr_tree:檢索所有輪廓,並組織為樹狀,包括所有層級(hierarchy)。

示意圖來自《學習opencv》

圖1 黑背景白前景

圖中最大的輪廓為c0,其內部包括兩個孔洞h00,h01,孔洞內部又包括子輪廓和子孔洞c000,c010等,那麼對應的四種mode如下圖

圖2 4中mode模式

5、int method:輪廓近似模式。有三個可選項

6:、point offset:可選項,表示每個輪廓點的偏移量。當使用roi時,可以保持得到的輪廓點座標和影象座標系一致。

opencv尋找輪廓 繪製輪廓 輪廓層級原理

void findcontours inputoutputarray image,outputarrayofarrays contours,outputarray hierarchy,int mode,int method,point offset point 引數image inputarray型...

OpenCV2馬拉松第24圈 輪廓提取

計算機視覺討論群162501053 收入囊中 葵花寶典 關於輪廓提取,幾乎相同是乙個連通域的推斷。原理還是比較簡單的。初識api c void findcontours inputoutputarrayimage,outputarrayofarrayscontours,outputarrayhier...

opencv學習筆記(二)尋找輪廓

opencv中使用findcontours函式來查詢輪廓,這個函式的原型為 1 void findcontours inputoutputarray image,outputarrayofarrays contours,outputarray hierar 2 chy,int mode,int me...