Python-opencv 筆記6 -- 輪廓(Contours)

Python-opencv 筆記6 – 輪廓(Contours)


1、查找輪廓 findContours


函數原型

image, contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

參數:

  • image:8位單通道二值圖,如果爲灰度圖非0值爲1
  • mode:輪廓的檢索模式
    • cv2.RETR_EXTERNAL:表示只檢測外輪廓
    • cv2.RETR_LIST:檢測的輪廓不建立等級關係
    • cv2.RETR_CCOMP:建立兩個等級的輪廓,上面的一層爲外邊界,裏面的一層爲內孔的邊界信息。如果內孔內還有一個連通物體,這個物體的邊界也在頂層
    • cv2.RETR_TREE:建立一個等級樹結構的輪廓
  • method:輪廓的近似辦法
    • cv2.CHAIN_APPROX_NONE:存儲所有的輪廓點,相鄰的兩個點的像素位置差不超過1,即max(abs(x1-x2),abs(y2-y1))== 1
    • cv2.CHAIN_APPROX_SIMPLE:壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點座標,例如一個矩形輪廓只需4個點來保存輪廓信息
    • cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

返回值:

  • image:被處理的圖片,正常沒用
  • contours:numpy的ndarray,每個元素都是圖像中的一個輪廓,每個元素包括多個點
  • hierarchy:numpy的ndarray,元素個數和輪廓個數相同,輪廓 contours[i] 對應於hierarchy[i],每個 hierarchy 元素包括四個元素 hierarchy[i][0] ~ hierarchy[i][3],分別表示後一個輪廓、前一個輪廓、父輪廓、內嵌輪廓的索引編號,如果沒有對應項,則該值爲負數。
# 實例
img = cv2.imread('1.jpg')  
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)  
  _, contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

2、繪製輪廓 findContours


函數原型

cv.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])

參數:

  • image:輸入圖像
  • contours:輪廓,一個輪廓2個點的維數爲(1,1,2,1,2)
  • contourIdx:繪製contours中的哪條輪廓,如果是-1,則繪製其中的所有輪廓
  • color:繪製的輪廓的顏色
  • thickness:輪廓線的寬度,如果是 -1(cv2.FILLED),則爲填充模式
# 實例
cv2.drawContours(img,contours,-1,(0,0,255),3)  
cv2.imshow("img", img)  
cv2.waitKey(0) 

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