OpenCV-Python:輪廓

啥叫輪廓

輪廓是一系列相連的點組成的曲線,表明了物體的基本外形。數組

輪廓與邊緣很類似,但輪廓是連續的,邊緣並不全都連續,其實邊緣主要是做爲圖像的特徵使用,好比用邊緣特徵能夠區分臉和手,而輪廓主要用來分析物體的形態,好比物體的周長和麪積等,能夠說邊緣包括輪廓。函數

尋找輪廓的操做通常用於二值化圖,因此一般會使用閾值分割或Canny邊緣檢測先獲得二值圖。spa

 

尋找輪廓

import cv2
img = cv2.imread('handwriting.jpg') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(img_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 尋找二值化圖中的輪廓
image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) print(len(contours))   # 結果是2
  • 參數2:輪廓的查找方式,通常使用cv2.RETR_TREE,表示提取全部輪廓並創建輪廓間的層級
  • 參數3:輪廓的近似方法,好比對於一條直線,咱們能夠存儲該直線的全部像素點,也能夠存儲起點和終點,使用cv2.CHAIN_APPROX_SIMPLE就表示儘量少的像素點表示輪廓

函數有3個返回值,image仍是原來的二值化圖片,hierarchy是輪廓間的層級關係,contours表示輪廓,以數組形式存儲,記錄了每條輪廓的全部像素點的座標(x,y)code

繪製輪廓 

ContourPicture = cv2.drawContours(img, contours, -1, (0, 0, 255), 2) cv2.imshow("ContourPicture", ContourPicture) cv2.waitKey(0)

參數2就是獲得contours,參數3表示要繪製那一條輪廓,-1表示繪製全部輪廓,參數4是顏色(B/G/R通道,因此(0,0,255)表示紅色),參數5表示線寬。blog

 

總結

使用cv2.findContours()尋找輪廓,cv2.drawContours()繪製輪廓圖片

相關文章
相關標籤/搜索