欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù)

 更新時(shí)間:2021年03月25日 09:11:56   作者:夢(mèng)想橡皮擦  
這篇文章主要介紹了Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

基礎(chǔ)知識(shí)鋪墊

在圖像中,輪廓可以簡(jiǎn)單的理解為連接具有相同顏色的所有連續(xù)點(diǎn)(邊界)的曲線,輪廓可用于形狀分析和對(duì)象檢測(cè)、識(shí)別等領(lǐng)域。

輪廓發(fā)現(xiàn)的原理:先通過(guò)閾值分割提取目標(biāo)物體,再通過(guò)邊緣檢測(cè)提取目標(biāo)物體輪廓。
一個(gè)輪廓就是一系列的點(diǎn)(像素),這些點(diǎn)構(gòu)成了一個(gè)有序的點(diǎn)集合。

使用 cv2.findContours 函數(shù)可以用來(lái)檢測(cè)圖像的邊緣。

函數(shù)原型說(shuō)明

contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

我使用的 Python OpenCV 是 4.0 以上版本,如果你使用的是 3.0 以上,可能存在返回值差異問(wèn)題。
參數(shù)說(shuō)明如下:

  • image:輸入圖像;
  • mode:輪廓檢索模式,具體說(shuō)明參見(jiàn)后文;
  • method:輪廓逼近方法,具體說(shuō)明參加后文;
  • contours:返回的輪廓;
  • hierachy:每條輪廓對(duì)應(yīng)的屬性;
  • offset:每個(gè)輪廓點(diǎn)移動(dòng)的可選偏移量。

備注:image 參數(shù)需要是二值圖,而不是灰度圖,返回結(jié)果是等高線和層次結(jié)構(gòu)。

輪廓檢索模式,有四種

  • cv2.RETR_EXTERNAL:表示只檢測(cè)外輪廓;
  • cv2.RETR_LIST:檢測(cè)的輪廓,不建立等級(jí)關(guān)系;
  • cv2.RETR_CCOMP:建立兩個(gè)等級(jí)的輪廓,上面的一層為外邊界,里面的一層為內(nèi)孔的邊界信息。如果內(nèi)孔內(nèi)還有一個(gè)連通物體,這個(gè)物體的邊界也在頂層;
  • cv2.RETR_TREE:建立一個(gè)等級(jí)樹(shù)結(jié)構(gòu)的輪廓。上述內(nèi)容,都可以在該網(wǎng)站查詢(xún):官網(wǎng)地址

輪廓逼近方法

  • cv2.CHAIN_APPROX_NONE:存儲(chǔ)所有的輪廓點(diǎn),相鄰的兩個(gè)點(diǎn)的像素位置差不超過(guò) 1,即 max(abs(x1-x2),abs(y2-y1))==1,一般不會(huì)用到;
  • cv2.CHAIN_APPROX_SIMPLE:壓縮水平方向,垂直方向,對(duì)角線方向的元素,只保留該方向的終點(diǎn)坐標(biāo),例如一個(gè)矩形輪廓只需 4 個(gè)點(diǎn)來(lái)保存輪廓信息。
  • cv2.CHAIN_APPROX_TC89_L1,cv2.CV_CHAIN_APPROX_TC89_KCOS:使用 teh-Chinl chain 近似算法(沒(méi)尋找資料學(xué)習(xí))。

了解上述內(nèi)容之后,就可以應(yīng)用輪廓發(fā)現(xiàn)函數(shù)了,代碼如下:

import cv2 as cv

src = cv.imread("./both.jpeg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 150, 255, 0)
cv.imshow("thresh",thresh)
# 尋找輪廓
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

輪廓發(fā)現(xiàn)之后,還要通過(guò) cv2.drawContours 函數(shù)繪制輪廓,該函數(shù)原型如下:

image = cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])

參數(shù)說(shuō)明如下:

  • image:輸入圖像;
  • contours:輪廓,在 Python 中是一個(gè) list,就是 cv2.findContours 函數(shù)找出來(lái)的點(diǎn)集,一個(gè)列表;
  • contourIdx:輪廓的索引,指定繪制輪廓 list 中的哪條輪廓,要繪制所有輪廓,請(qǐng)傳遞-1;color:顏色;
  • thickness:厚度,如果是-1,表示填充;
  • lineType:線型;
  • hierarchy:層次結(jié)構(gòu)的可選信息;
  • maxLevel:繪制輪廓的最大級(jí)別,0:僅繪制指定的輪廓,1:繪制輪廓和所有嵌套輪廓,2:繪制輪廓,所有嵌套輪廓,所有嵌套到嵌套的輪廓;
  • offset:輪廓偏移參數(shù)。

測(cè)試代碼與運(yùn)行結(jié)果如下:

import cv2 as cv
# help(cv.drawContours)
src = cv.imread("./both.jpeg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 150, 255, 0)
cv.imshow("thresh",thresh)
# 尋找輪廓
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

# print(contours)
# print(hierarchy)
# 繪制輪廓
cv.drawContours(src,contours,-1,(200,0,150),2)

cv.imshow('src',src)
cv.waitKey(0)

到此這篇關(guān)于Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù)的文章就介紹到這了,更多相關(guān)OpenCV 邊緣提取輪廓 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解

    在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解

    下面小編就為大家分享一篇在Windows中設(shè)置Python環(huán)境變量的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python中tuple類(lèi)型的使用

    Python中tuple類(lèi)型的使用

    在Python中,元組(tuple)是一種不可變的序列類(lèi)型,可以包含多個(gè)值,這些值可以是不同類(lèi)型的,本文主要介紹了Python中tuple類(lèi)型的使用,感興趣的可以了解一下
    2023-12-12
  • 詳解運(yùn)行Python的神器Jupyter Notebook

    詳解運(yùn)行Python的神器Jupyter Notebook

    如果我們想要運(yùn)行Python,就是在Python或者IPython的解釋器環(huán)境中進(jìn)行交互式運(yùn)行,或者程序員最喜歡的編寫(xiě).py文件,在文件中編寫(xiě)python代碼,然后運(yùn)行。如果想寫(xiě)一篇Python的文章,里面有代碼,還希望代碼在當(dāng)前頁(yè)面運(yùn)行,那就是使用我們今天要介紹的Jupyter Notebook。
    2021-06-06
  • python多進(jìn)程實(shí)現(xiàn)文件下載傳輸功能

    python多進(jìn)程實(shí)現(xiàn)文件下載傳輸功能

    這篇文章主要為大家詳細(xì)介紹了python多進(jìn)程實(shí)現(xiàn)文件下載傳輸功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • PyTorch一小時(shí)掌握之神經(jīng)網(wǎng)絡(luò)分類(lèi)篇

    PyTorch一小時(shí)掌握之神經(jīng)網(wǎng)絡(luò)分類(lèi)篇

    這篇文章主要介紹了PyTorch一小時(shí)掌握之神經(jīng)網(wǎng)絡(luò)分類(lèi)篇,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Python pip安裝第三方庫(kù)的攻略分享

    Python pip安裝第三方庫(kù)的攻略分享

    pip 就是 Python 標(biāo)準(zhǔn)庫(kù)(The Python Standard Library)中的一個(gè)包,只是這個(gè)包比較特殊,用它可以來(lái)管理 Python 標(biāo)準(zhǔn)庫(kù)(The Python Standard Library)中其他的包。本文為大家介紹了pip安裝第三方庫(kù)的方法,需要的可以參考一下
    2022-11-11
  • Python計(jì)算序列相似度的算法實(shí)例

    Python計(jì)算序列相似度的算法實(shí)例

    這篇文章主要介紹了Python計(jì)算序列相似度的算法實(shí)例,求兩個(gè)序列轉(zhuǎn)換的最少交換步驟和最小交換距離,本文提供了部分實(shí)現(xiàn)代碼與解決思路,對(duì)開(kāi)發(fā)非常有幫助,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于python中逆序的三位數(shù)

    關(guān)于python中逆序的三位數(shù)

    這篇文章主要介紹了關(guān)于python中逆序的三位數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python實(shí)現(xiàn)聊天機(jī)器人的示例代碼

    Python實(shí)現(xiàn)聊天機(jī)器人的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)聊天機(jī)器人,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Flask中endpoint的理解(小結(jié))

    Flask中endpoint的理解(小結(jié))

    這篇文章主要介紹了Flask中endpoint的理解(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論