Opencv4 官方文檔 : https://docs.opencv.org/4.2.0/
Opencv4 for Python中文文檔點擊下載:OpenCV4 for Python 中文文檔
1 圖像輪廓
. 輪廓可以簡單認爲成將連續的點(連着邊界)連在一起的曲線,具有相同 的顏色或者灰度。
. 輪廓在形狀分析和物體的檢測和識別中很有用。
. 爲了更加準確,要使用二值化圖像。在尋找輪廓之前,要進行閾值化處理或者 Canny 邊界檢測
. 查找輪廓的函數會修改原始圖像。如果你在找到輪廓之後還想使用原始圖像的話,
你應該將原始圖像存儲到其他變量中.
. 在 OpenCV 中,查找輪廓就像在黑色背景中超白色物體。要找的物體應該是白色,而背景應該是黑色
.發現輪廓:cv.findContours();繪製輪廓:cv.drawContours()
2 相關api
cv.findContours(image, mode, method, contours=None, hierarchy=None, offset=None)
- 參數:
- image:輸入圖像;
- mode:輪廓檢索模式;
- method:輪廓近似方法;
- contours:-
- hierarchy:-
- offset:每一個輪廓點的偏移量. 當輪廓是從圖像 ROI 中提取出來的時候,使用偏移量有用,因爲可以從整個圖像上下文來對輪廓做分析
- 返回值:
返回值有三個,第一個是圖像,第二個是輪廓,第三個是(輪廓的)層析結構。 輪廓(第二個返回值)是一個 Python 列表,其中存儲這圖像中的所有輪廓。 每一個輪廓都是一個 Numpy 數組,包含對象邊界點(x,y)的座標。
3 輪廓周長:
也成爲了弧長,用以下api可直接獲取
perimeter = cv.arcLength(cnt,True)
4 輪廓構成面積
直接api獲取:
area = cv.contourArea(cnt)
還有很多屬性等,暫時先略過
5 demo
demo:
def edge_demo(image):
blurred = cv.GaussianBlur(image, (3, 3), 0)
gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)
grad_x = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
grad_y = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
# edge_output = cv.Canny(grad_x, grad_y, 30, 150)
edge_output = cv.Canny(gray, 50, 150)
cv.imshow("canny extraction",edge_output)
return edge_output
def contours_demo(image):
binary = edge_demo(image)
contours, hierarchy= cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
for i, contour in enumerate(contours):
cv.drawContours(image, contours, i, (0, 0, 255), 2)
print(i)
cv.imshow("detect contours", image)
result:
轉載請註明轉自:https://leejason.blog.csdn.net/article/details/106448720