Python+OpenCV影像處理(十六)—— 輪廓發現

來源:互聯網
上載者:User

標籤:jpg   自適應   負數   idt   eve   獨立   clone   nes   def   

簡介:輪廓發現是基於映像邊緣提取的基礎尋找對象輪廓的方法,所以邊緣提取的閾值選定會影響最終輪廓發現結果。

代碼如下:

import cv2 as cvimport numpy as npdef contours_demo(image):    dst = cv.GaussianBlur(image, (3, 3), 0) #高斯模糊去噪    gray = cv.cvtColor(dst, cv.COLOR_RGB2GRAY)    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) #用大律法、全域自適應閾值方法進行映像二值化    cv.imshow("binary image", binary)    cloneTmage, contours, heriachy = 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("contours", image)    for i, contour in enumerate(contours):        cv.drawContours(image, contours, i, (0, 0, 255), -1)    cv.imshow("pcontours", image)src = cv.imread(‘E:/imageload/coins.jpg‘)cv.namedWindow(‘input_image‘, cv.WINDOW_NORMAL) #設定為WINDOW_NORMAL可以任意縮放cv.imshow(‘input_image‘, src)contours_demo(src)cv.waitKey(0)cv.destroyAllWindows()

運行結果:

注意:

1.Opencv發現輪廓的函數原型為:findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy

image參數表示8位單通道映像矩陣,可以是灰階圖,但更常用的是二值映像,一般是經過Canny、拉普拉斯等邊緣檢測運算元處理過的二值映像。

mode參數表示輪廓檢索模式:

①CV_RETR_EXTERNAL:只檢測最外圍輪廓,包含在外圍輪廓內的內圍輪廓被忽略。

②CV_RETR_LIST:檢測所有的輪廓,包括內圍、外圍輪廓,但是檢測到的輪廓不建立等級關係,彼此之間獨立,沒有等級關係,這就意味著這個檢索模式下不存在父輪廓或內嵌輪廓。

③CV_RETR_CCOMP:檢測所有的輪廓,但所有輪廓只建立兩個等級關係,外圍為頂層,若外圍內的內圍輪廓還包含了其他的輪廓資訊,則內圍內的所有輪廓均歸屬於頂層。

④CV_RETR_TREE:檢測所有輪廓,所有輪廓建立一個等級樹結構,外層輪廓包含內層輪廓,內層輪廓還可以繼續包含內嵌輪廓。

method參數表示輪廓的近似方法:

①CV_CHAIN_APPROX_NONE 儲存所有的輪廓點,相鄰的兩個點的像素位置差不超過1,即max (abs (x1 - x2), abs(y2 - y1) == 1。

②CV_CHAIN_APPROX_SIMPLE壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點座標,例如一個矩形輪廓只需4個點來儲存輪廓資訊。

③CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似演算法。

contours參數是一個list,表示儲存的每個輪廓的點集合。

hierarchy參數是一個list,list中元素個數和輪廓個數相同,每個輪廓contours[i]對應4個hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分別表示後一個輪廓、前一個輪廓、父輪廓、內嵌輪廓的索引編號,如果沒有對應項,則該值為負數。

offset參數表示每個輪廓點移動的可選位移量。

 

2.Opencv繪製輪廓的函數原型為:drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) -> image

imgae參數表示靶心圖表像。

contours參數表示所有輸入輪廓。

contourIdx參數表示繪製輪廓list中的哪條輪廓, 如果是負數,則繪製所有輪廓。

color參數表示輪廓的顏色。

thickness參數表示繪製的輪廓線條寬度,如果是負數,則繪製輪廓內部。

lineType參數表示線型。

hierarchy參數表示有關階層的可選資訊。

maxLevel參數表示繪製輪廓的最大層級。 如果為0,則僅繪製指定的輪廓。 如果為1,則該函數繪製輪廓和所有嵌套輪廓。 如果為2,則該函數繪製輪廓,所有嵌套輪廓,所有嵌套到嵌套的輪廓,等等。 僅當有可用的階層時才考慮此參數。

offset參數表示可選的輪廓位移參數,該參數可按指定的方式移動所有繪製的輪廓。

 

Python+OpenCV影像處理(十六)—— 輪廓發現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.