第十七節,OpenCV(學習六)圖像輪廓檢測

一、檢測輪廓

輪廓檢測是圖像處理中常常用到的,OpenCV-Python接口中使用cv2.findContours()函數查找檢測物體的輪廓。算法

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

 

返回兩個值:contours(輪廓自己),hierarchy(每條輪廓對應的屬性)函數

參數:spa

  • image:尋找輪廓的圖像
  • mode:輪廓的檢索模式:

    cv2.RETR_EXTERNAL表示只檢測外輪廓 cv2.RETR_LIST檢測的輪廓不創建等級關係,cv2.RETR_CCOMP創建兩個等級的輪廓,上面的一層爲外邊界,裏面的一層爲內孔的邊界信息。若是內孔內還有一個連通物體,這個物體的邊界也在頂層。cv2.RETR_TREE創建一個等級樹結構的輪廓。code

  • method:輪廓的近似方法。

    cv2.CHAIN_APPROX_NONE存儲全部的輪廓點,相鄰的兩個點的像素位置差不超過1,即max(abs(x1-x2), abs(y1-y2))=1。 cv2.CHAIN_APPROX_SIMPLE壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點座標,例如一個矩陣輪廓只需4個點來保存輪廓信息。 cv2.CHAIN_APPROX_TC89_L1, cv2.CHAIN_APPROX_TC89_KCOS使用teh-Chini chain近似算法

    blog

二、繪製輪廓

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

 

參數:接口

  • image:傳入要繪製輪廓的背景圖片
  • contours:輪廓自己
  • contourIdx:指定繪製輪廓中的那條輪廓,若是是-1,則繪製其中的全部輪廓。thickness表示的是輪廓的寬度,若是是-1(cv2.FILLED),表示爲填充模式。

三、代碼實現

import numpy as np import cv2 # 輪廓檢測
img = cv2.imread('dog.jpg') # 獲取灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 利用閾值自動選擇的方法獲取二值圖像
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) # 檢測輪廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 繪製輪廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 1) cv2.imshow('gray', gray) cv2.imshow('res', img) cv2.waitKey(0) cv2.destroyAllWindows()

 

相關文章
相關標籤/搜索