溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

利用Python+OpenCV圖像處理功能實現(xiàn)輪廓發(fā)現(xiàn)

發(fā)布時間:2020-10-26 14:40:40 來源:億速云 閱讀:207 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)利用Python+OpenCV圖像處理功能實現(xiàn)輪廓發(fā)現(xiàn),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

代碼如下:

import cv2 as cv
import numpy as np
def 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) #用大律法、全局自適應(yīng)閾值方法進行圖像二值化
  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) #設(shè)置為WINDOW_NORMAL可以任意縮放
cv.imshow('input_image', src)
contours_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

運行結(jié)果:

利用Python+OpenCV圖像處理功能實現(xiàn)輪廓發(fā)現(xiàn)

注意:

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

image參數(shù)表示8位單通道圖像矩陣,可以是灰度圖,但更常用的是二值圖像,一般是經(jīng)過Canny、拉普拉斯等邊緣檢測算子處理過的二值圖像。

mode參數(shù)表示輪廓檢索模式:

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

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

③CV_RETR_CCOMP:檢測所有的輪廓,但所有輪廓只建立兩個等級關(guān)系,外圍為頂層,若外圍內(nèi)的內(nèi)圍輪廓還包含了其他的輪廓信息,則內(nèi)圍內(nèi)的所有輪廓均歸屬于頂層。

④CV_RETR_TREE:檢測所有輪廓,所有輪廓建立一個等級樹結(jié)構(gòu),外層輪廓包含內(nèi)層輪廓,內(nèi)層輪廓還可以繼續(xù)包含內(nèi)嵌輪廓。

method參數(shù)表示輪廓的近似方法:

①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參數(shù)是一個list,表示存儲的每個輪廓的點集合。

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

offset參數(shù)表示每個輪廓點移動的可選偏移量。

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

imgae參數(shù)表示目標圖像。

contours參數(shù)表示所有輸入輪廓。

contourIdx參數(shù)表示繪制輪廓list中的哪條輪廓, 如果是負數(shù),則繪制所有輪廓。

color參數(shù)表示輪廓的顏色。

thickness參數(shù)表示繪制的輪廓線條粗細,如果是負數(shù),則繪制輪廓內(nèi)部。

lineType參數(shù)表示線型。

hierarchy參數(shù)表示有關(guān)層次結(jié)構(gòu)的可選信息。

maxLevel參數(shù)表示繪制輪廓的最大級別。 如果為0,則僅繪制指定的輪廓。 如果為1,則該函數(shù)繪制輪廓和所有嵌套輪廓。 如果為2,則該函數(shù)繪制輪廓,所有嵌套輪廓,所有嵌套到嵌套的輪廓,等等。 僅當(dāng)有可用的層次結(jié)構(gòu)時才考慮此參數(shù)。

offset參數(shù)表示可選的輪廓偏移參數(shù),該參數(shù)可按指定的方式移動所有繪制的輪廓。

看完上述內(nèi)容,你們對利用Python+OpenCV圖像處理功能實現(xiàn)輪廓發(fā)現(xiàn)有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI