日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

OpenCV-Python 轮廓分层 | 二十五

發布時間:2023/10/11 综合教程 103 老码农
生活随笔 收集整理的這篇文章主要介紹了 OpenCV-Python 轮廓分层 | 二十五 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標

這次我們學習輪廓的層次,即輪廓中的父子關系。

理論

在前幾篇關于輪廓的文章中,我們已經討論了與OpenCV提供的輪廓相關的幾個函數。但是當我們使用cv.findcontour()函數在圖像中找到輪廓時,我們已經傳遞了一個參數,輪廓檢索模式。我們通常通過了cv.RETR_LISTcv.RETR_TREE,效果很好。但這到底意味著什么呢?

另外,在輸出中,我們得到了三個數組,第一個是圖像,第二個是輪廓,還有一個我們命名為hierarchy的輸出(請檢查前面文章中的代碼)。但我們從未在任何地方使用過這種層次結構。那么這個層級是什么?它是用來做什么的?它與前面提到的函數參數有什么關系?

這就是我們在本文中要討論的內容。

層次結構是什么?

通常我們使用cv.findcontour()函數來檢測圖像中的對象,對吧?有時對象在不同的位置。但在某些情況下,某些形狀在其他形狀中。就像嵌套的圖形一樣。在這種情況下,我們把外部的稱為父類,把內部的稱為子類。這樣,圖像中的輪廓就有了一定的相互關系。我們可以指定一個輪廓是如何相互連接的,比如,它是另一個輪廓的子輪廓,還是父輪廓等等。這種關系的表示稱為層次結構

下面是一個例子:

在這張圖中,有一些形狀我已經從0-5開始編號。22a表示最外層盒子的外部和內部輪廓。

這里,等高線0,1,2在外部或最外面。我們可以說,它們在層級-0中,或者簡單地說,它們在同一個層級中。

其次是contour-2a。它可以被認為是contour-2的子級(或者反過來,contour-2是contour-2a的父級)。假設它在層級-1中。類似地,contour-3是contour-2的子級,它位于下一個層次結構中。最后,輪廓4,5是contour-3a的子級,他們在最后一個層級。從對方框的編號來看,我認為contour-4是contour-3a的第一個子級(它也可以是contour-5)。

我提到這些是為了理解一些術語,比如相同層級,外部輪廓子輪廓父輪廓第一個子輪廓等等?,F在讓我們進入OpenCV。

OpenCV中的分級表示

所以每個輪廓都有它自己的信息關于它是什么層次,誰是它的孩子,誰是它的父母等等。OpenCV將它表示為一個包含四個值的數組:[Next, Previous, First_Child, Parent]

“Next表示同一層次的下一個輪廓?!?/em>

例如,在我們的圖片中取contour-0。誰是下一個同級別的等高線?這是contour-1。簡單地令Next = 1。類似地,Contour-1也是contour-2。所以Next = 2。

contour-2呢?同一水平線上沒有下一條等高線。簡單地,讓Next = -1。contour-4呢?它與contour-5處于同一級別。它的下一條等高線是contour-5,所以next = 5。

“Previous表示同一層次上的先前輪廓?!?/em>

和上面一樣。contour-1之前的等值線為同級別的contour-0。類似地,contour-2也是contour-1。對于contour-0,沒有前項,所以設為-1。

“First_Child表示它的第一個子輪廓?!?/em>

沒有必要作任何解釋。對于contour-2, child是contour-2a。從而得到contour-2a對應的指標值。contour-3a呢?它有兩個孩子。但我們只關注第一個孩子。它是contour-4。那么First_Child = 4 對contour-3a而言。

“Parent表示其父輪廓的索引?!?/em>

它與First_Child相反。對于輪廓線-4和輪廓線-5,父輪廓線都是輪廓線-3a。對于輪廓3a,它是輪廓-3,以此類推。

注意

如果沒有子元素或父元素,則該字段被視為-1

現在我們已經了解了OpenCV中使用的層次樣式,我們可以借助上面給出的相同圖像來檢查OpenCV中的輪廓檢索模式。一些標志如 cv.RETR_LIST, cv.RETR_TREE,cv.RETR_CCOMP, cv.RETR_EXTERNAL等等的含義。

輪廓檢索模式

1. RETR_LIST

這是四個標志中最簡單的一個(從解釋的角度來看)。它只是檢索所有的輪廓,但不創建任何親子關系。在這個規則下,父輪廓和子輪廓是平等的,他們只是輪廓。他們都屬于同一層級。

這里,第3和第4項總是-1。但是很明顯,下一項和上一項都有對應的值。你自己檢查一下就可以了。

下面是我得到的結果,每一行是對應輪廓的層次細節。例如,第一行對應于輪廓0。下一條輪廓是輪廓1。所以Next = 1。沒有先前的輪廓,所以Previous=-1。剩下的兩個,如前所述,是-1。

>>> hierarchy
array([[[ 1, -1, -1, -1],
[ 2, 0, -1, -1],
[ 3, 1, -1, -1],
[ 4, 2, -1, -1],
[ 5, 3, -1, -1],
[ 6, 4, -1, -1],
[ 7, 5, -1, -1],
[-1, 6, -1, -1]]])

如果您沒有使用任何層次結構特性,那么這是在您的代碼中使用的最佳選擇。

2. RETR_EXTERNAL

如果使用此標志,它只返回極端外部標志。所有孩子的輪廓都被留下了。我們可以說,根據這項規則,每個家庭只有長子得到關注。它不關心家庭的其他成員:)。

所以在我們的圖像中,有多少個極端的外輪廓?在等級0級?有3個,即等值線是0 1 2,對吧?現在試著用這個標志找出等高線。這里,給每個元素的值與上面相同。并與上述結果進行了比較。以下是我得到的:

>>> hierarchy
array([[[ 1, -1, -1, -1],
[ 2, 0, -1, -1],
[-1, 1, -1, -1]]])

如果只想提取外部輪廓,可以使用此標志。它在某些情況下可能有用。

3. RETR_CCOMP

此標志檢索所有輪廓并將其排列為2級層次結構。物體的外部輪廓(即物體的邊界)放在層次結構-1中。對象內部孔洞的輪廓(如果有)放在層次結構-2中。如果其中有任何對象,則其輪廓僅在層次結構1中重新放置。以及它在層級2中的漏洞等等。

只需考慮在黑色背景上的“白色的零”圖像。零的外圓屬于第一級,零的內圓屬于第二級。

我們可以用一個簡單的圖像來解釋它。這里我用紅色標注了等高線的順序和它們所屬的層次,用綠色標注(1或2),順序與OpenCV檢測等高線的順序相同。

考慮第一個輪廓,即contour-0。這是hierarchy-1。它有兩個孔,分別是等高線1和2,屬于第二級。因此,對于輪廓-0,在同一層次的下一個輪廓是輪廓-3。previous也沒有。在hierarchy-2中,它的第一個子結點是contour-1。它沒有父類,因為它在hierarchy-1中。所以它的層次數組是[3,-1,1,-1]

現在contour-1。它在層級-2中。相同層次結構中的下一個(在contour-1的父母關系下)是contour-2。沒有previous。沒有child,但是parent是contour-0。所以數組是[2,-1,-1,0]

類似的contour-2:它在hierarchy-2中。在contour-0下,同一層次結構中沒有下一個輪廓。所以沒有Next。previous是contour-1。沒有childparent是contour0。所以數組是[-1,1,-1,0]

contour-3:層次-1的下一個是輪廓-5。以前是contour-0。child是contour4,沒有parent。所以數組是[5,0,4,-1]

contour-4:它在contour-3下的層次結構2中,它沒有兄弟姐妹。沒有next,沒有previous,沒有child,parent是contour-3。所以數組是[-1,-1,-1,3]

剩下的你可以補充。這是我得到的最終答案:

>>> hierarchy
array([[[ 3, -1, 1, -1],
[ 2, -1, -1, 0],
[-1, 1, -1, 0],
[ 5, 0, 4, -1],
[-1, -1, -1, 3],
[ 7, 3, 6, -1],
[-1, -1, -1, 5],
[ 8, 5, -1, -1],
[-1, 7, -1, -1]]])

4. RETR_TREE

這是最后一個家伙,完美先生。它檢索所有的輪廓并創建一個完整的家族層次結構列表。它甚至告訴,誰是爺爺,父親,兒子,孫子,甚至更多…

總結

以上是生活随笔為你收集整理的OpenCV-Python 轮廓分层 | 二十五的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲色图在线观看 | 爱乃なみ加勒比在线播放 | av在线免费网站 | 久久电影一区 | 亚洲中文一区二区三区 | 丁香六月激情 | 日本高清黄色 | 国产高清免费视频 | 精品人妻伦九区久久aaa片 | 奇米四色777 | 小妹色播 | 无码一区二区三区 | 国产露脸无套对白在线播放 | 在线免费观看一区二区三区 | 亚洲五级片 | 国产一级aa大片毛片 | 一眉道姑 电影 | 日日噜噜噜夜夜爽爽狠狠视频97 | 一区二区精品在线观看 | 青草草在线 | 波多野结衣av在线观看 | 自拍三级 | 欧美日韩一区二区三区免费 | jizzjizzjizz亚洲| 欧美成人精品一区二区三区 | 欧美高清免费 | 狠狠久久综合 | 成年人免费网站 | 亚洲人精品午夜射精日韩 | 福利视频在线 | 色中色综合网 | 国产盗摄视频在线观看 | 国产91在线视频观看 | 久久午夜夜伦鲁鲁片 | 日本特级黄色录像 | 九九精品在线视频 | 久久久久久久久久一区二区 | www.色日本 | 东南亚毛片 | 香蕉视频免费在线 | 欧美三级免费观看 | 青青av | 五月天婷婷丁香 | 欧美午夜精品一区二区 | 欧美久久久久久久久久久久久久 | 嫩草免费视频 | 人人草网| 美女隐私无遮挡网站 | 天天综合网天天综合色 | 日韩久久精品一区二区 | 欧美情侣性视频 | 亚洲最大的成人网 | 成人欧美在线观看 | 欧美视频精品 | 欧美另类高清 | xxx视频在线观看 | 大地av| 色资源网站 | 日韩欧美有码 | 黄污视频网站 | 黄色日韩视频 | 婷婷99| 少妇在线播放 | 久久看片网 | 99re热这里只有精品视频 | 国产在线观看第一页 | 在线观看成人免费视频 | 天堂av亚洲av国产av电影 | 国产成人精品久久二区二区91 | 国产777| 国产区视频 | 草1024榴社区成人 | 亚洲婷婷在线视频 | 国产精品久久久久久无人区 | 色老头影视 | 欧美日韩视频免费观看 | 亚洲成成品网站 | 亚洲一级片在线播放 | 天天干b | 欧美一区二区三区爽爽爽 | 亚洲视频 欧美视频 | 欧美呦呦呦 | 日本大尺度做爰呻吟 | 久久久久久久久97 | 白丝校花扒腿让我c | v888av| 欧美成人高潮一二区在线看 | 91av免费观看| 欧美丰满老妇熟乱xxxxyyy | 免费观看国产视频 | av在线天天 | 精品视频在线一区二区 | 天天做天天看 | 伊人精品视频 | 日本大片黄 | 亚洲精品乱码久久久久久蜜桃欧美 | 两根大肉大捧一进一出好爽视频 | 亚洲色图p | 成人精品一区二区三区视频 |