OpenCV for Python之圖像輪廓

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)
  1. 參數:
  • image:輸入圖像;
  • mode:輪廓檢索模式;
  • method:輪廓近似方法;
  • contours:-
  • hierarchy:-
  • offset:每一個輪廓點的偏移量. 當輪廓是從圖像 ROI 中提取出來的時候,使用偏移量有用,因爲可以從整個圖像上下文來對輪廓做分析
  1. 返回值:
    返回值有三個,第一個是圖像,第二個是輪廓,第三個是(輪廓的)層析結構。 輪廓(第二個返回值)是一個 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章