1.輸入為二值圖像,黑色為背景,白色為目標
2.該函數會修改原圖像,因此若想保留原圖像在,則需拷貝一份,在拷貝圖里修改。
一.查找輪廓
cv2.findContours()
三個輸入參數:輸入圖像(二值圖像),輪廓檢索方式,輪廓近似方法
1.輪廓檢索方式
cv2.RETR_EXTERNAL | 只檢測外輪廓 |
cv2.RETR_LIST | 檢測的輪廓不建立等級關系 |
cv2.RETR_CCOMP | 建立兩個等級的輪廓,上面一層為外邊界,里面一層為內孔的邊界信息 |
cv2.RETR_TREE | 建立一個等級樹結構的輪廓 |
2.輪廓近似辦法
cv2.CHAIN_APPROX_NONE | 存儲所有邊界點 |
cv2.CHAIN_APPROX_SIMPLE | 壓縮垂直、水平、對角方向,只保留端點 |
cv2.CHAIN_APPROX_TX89_L1 | 使用teh-Chini近似算法 |
cv2.CHAIN_APPROX_TC89_KCOS | 使用teh-Chini近似算法 |
三個返回值:圖像,輪廓,輪廓的層析結構
二.繪制輪廓
cv2.drawContours()
五個輸入參數:原始圖像,輪廓(python列表),輪廓的索引(當設置為-1時,繪制所有輪廓),畫筆顏色,畫筆大小
一個返回值:返回繪制了輪廓的圖像
代碼:
import cv2 img = cv2.imread('D:\\test\\contour.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY) binary , contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) # 輸出為三個參數 cv2.drawContours(img,contours,-1,(0,0,255),3) cv2.imshow("img", img) cv2.waitKey(0)