python+OpenCV图像处理(十一)图像轮廓检测
生活随笔
收集整理的這篇文章主要介紹了
python+OpenCV图像处理(十一)图像轮廓检测
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖像輪廓檢測
?
(一)檢測輪廓
在OpenCV-python中,使用cv2.findContours()函數來對圖像進行輪廓檢測。
返回三個值:image,contours,hierarchy
contours指的是輪廓本身,hierarchy是每條輪廓對應的屬性
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])參數:
- 第一個參數是尋找輪廓的圖像;
- 第二個參數表示輪廓的檢索模式:cv2.RETR_EXTERNAL表示只檢測外輪廓? ? cv2.RETR_LIST檢測的輪廓不建立等級關系,cv2.RETR_CCOMP建立兩個等級的輪廓,上面的一層為外邊界,里面的一層為內孔的邊界信息。如果內孔內還有一個連通物體,這個物體的邊界也在頂層。cv2.RETR_TREE建立一個等級樹結構的輪廓。
- 第三個參數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近似算法??
?(二)繪制輪廓
OpenCV中使用cv2.drawContours在圖像上繪制輪廓
cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[,maxLevel[, offset ]]]]])參數:
- 第一個參數傳入所要繪制輪廓的背景圖片
- 第二個參數是輪廓本身
- 第三個參數指定繪制輪廓中的哪條輪廓,如果是-1,則繪制其中的所有的輪廓。thickness表示的是輪廓的寬度,如果是-1(cv2.FILLED),表示為填充模式。
(三)代碼實現?
# 輪廓檢測 img = cv2.imread('2.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 獲取灰度圖 ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) # 利用閾值自動選擇的方法獲取二值圖像 image, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 檢測輪廓 cv2.drawContours(img, contours, -1, (0, 255, 0), 1) # 畫出輪廓 cv2.imshow('gray', binary) cv2.imshow('res', img) cv2.waitKey(0) cv2.destroyAllWindows()總結
以上是生活随笔為你收集整理的python+OpenCV图像处理(十一)图像轮廓检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MATLAB的GUI如何清空坐标轴的图像
- 下一篇: C++局部变量和全局变量的初始化