python-opencv cv2.findContours()函數

示例代碼:

image,contours,hierarchy = cv2.findContours(contour,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)


輸入:

contour:帶有輪廓信息的圖像;

cv2.RETR_TREE:提取輪廓後,輸出輪廓信息的組織形式,除了cv2.RETR_TREE還有以下幾種選項:

cv2.RETR_EXTERNAL:輸出輪廓中只有外側輪廓信息;

cv2.RETR_LIST:以列表形式輸出輪廓信息,各輪廓之間無等級關係;

cv2.RETR_CCOMP:輸出兩層輪廓信息,即內外兩個邊界(下面將會說到contours的數據結構);

cv2.RETR_TREE:以樹形結構輸出輪廓信息。

cv2.CHAIN_APPROX_SIMPLE:指定輪廓的近似辦法,有以下選項:

cv2.CHAIN_APPROX_NONE:存儲輪廓所有點的信息,相鄰兩個輪廓點在圖象上也是相鄰的;

cv2.CHAIN_APPROX_SIMPLE:壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點座標;

cv2.CHAIN_APPROX_TC89_L1:使用teh-Chinl chain 近似算法保存輪廓信息。


輸出:

python3裏返回三個值:image,contours,hierarchy

image:可能是跟輸入contour類似的一張二值圖;

contours:list結構,list中每個元素都是圖像中的一個輪廓,用numpy中的ndarray表示,每個輪廓是一個ndarray,每個ndarray是輪廓上的點的集合,列表中每個元素代表一個邊沿信息。每個元素是(x,1,2)的三維向量,x表示該條邊沿裏共有多少個像素點,第三維的那個“2”表示每個點的橫、縱座標;

注意:如果輸入選擇cv2.CHAIN_APPROX_SIMPLE,則contours中一個list元素所包含的x點之間應該用直線連接起來,這個可以用cv2.drawContours()函數觀察一下效果。

hierarchy:返回類型是(x,4)的二維ndarray。其中的元素個數和輪廓個數相同,每個輪廓contours[i]對應4個hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分別對應下一個輪廓編號、上一個輪廓編號、父輪廓編號、子輪廓編號,該值爲負數表示沒有對應項。x和contours裏的x是一樣的意思。如果輸入選擇cv2.RETR_TREE,則以樹形結構組織輸出,hierarchy的四列


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章