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

OpenCV凸包檢測(cè)和凸缺陷學(xué)習(xí)示例

 更新時(shí)間:2022年06月07日 09:42:54   作者:胖大海pyh  
這篇文章主要為大家介紹了OpenCV凸包檢測(cè)和凸缺陷學(xué)習(xí)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1、凸包檢測(cè)與凸缺陷定義

凸包是將最外層的點(diǎn)連接起來(lái)構(gòu)成的凸多邊形,它能包含點(diǎn)擊中所有的點(diǎn)。物體的凸包檢測(cè)常應(yīng)用在物體識(shí)別、手勢(shì)識(shí)別及邊界檢測(cè)等領(lǐng)域。

凸包檢測(cè)常常用在輪廓分析之后。對(duì)二值圖像進(jìn)行輪廓分析之后,可以構(gòu)建每個(gè)輪廓的凸包,構(gòu)建完成之后會(huì)返回該凸包包含的點(diǎn)集。根據(jù)返回的凸包點(diǎn)集可以繪制該輪廓對(duì)應(yīng)的凸包。一般來(lái)說(shuō),凸性曲線總是凸出來(lái)的,至少是平的。如果有地方凹進(jìn)去了就被叫做凸性缺陷。

下圖可以更加直接的了解凸包和凸缺陷的定義:

2、opencv相關(guān)實(shí)現(xiàn)函數(shù)

OpenCV中提供了函數(shù)convexHull 用于對(duì)物體輪廓凸包進(jìn)行檢測(cè),函數(shù)convexityDefect進(jìn)行凸缺陷的檢測(cè)。首先來(lái)了解一下各參數(shù)意義:

hull = cv2.convexHull(points, clockwise, returnpoints)

各參數(shù)意義: 

points:輸入的輪廓點(diǎn)集 

clockwise:方向標(biāo)志,如果設(shè)置為True,輸出的凸包是順時(shí)針?lè)较虻?,否則為逆時(shí)針?lè)较颉?nbsp;

returnPoints:是否返回點(diǎn)集 

hull : 輸出凸包結(jié)果,當(dāng)參數(shù)returnPoints為ture的時(shí)候返回凸包的頂點(diǎn)坐標(biāo)是個(gè)點(diǎn)集、returnPoints為false的是返回與凸包點(diǎn)對(duì)應(yīng)的輪廓上的點(diǎn)對(duì)應(yīng)的index

下面這個(gè)函數(shù)可以幫助我們找到凸缺陷:

convexityDefects = cv2.convexityDefect(contour, convexhull)

注意:

進(jìn)行凸檢測(cè)時(shí),凸包檢測(cè)中的returnPoints要設(shè)置為False 

凸缺陷返回一個(gè)數(shù)組,每一行包含值是起點(diǎn),終點(diǎn),最遠(yuǎn)的點(diǎn),到最遠(yuǎn)點(diǎn)的近似距離,返回的前三個(gè)點(diǎn)都是輪廓索引。

contour: 檢測(cè)到的輪廓,可以調(diào)用findContours函數(shù)得到 

convexhull:檢測(cè)到的凸包,可以調(diào)用convexHull函數(shù)得到。 

convexityDefects:輸出參數(shù),檢測(cè)到的最終結(jié)果,返回一個(gè)數(shù)組,其中每一行包含的值是[起點(diǎn),終點(diǎn),最遠(yuǎn)的點(diǎn),到最遠(yuǎn)點(diǎn)的近似距離]。前三個(gè)點(diǎn)都是輪廓索引。 

前三個(gè)值得含義分別為:凸缺陷的起始點(diǎn),凸缺陷的終點(diǎn),凸缺陷的最深點(diǎn)(即邊緣點(diǎn)到凸包距離最大點(diǎn))

3、代碼實(shí)踐

我們可以在一張圖上顯示輪廓的凸包和凸缺陷。

我們將起點(diǎn)和終點(diǎn)用一條紅線 連接,在最遠(yuǎn)點(diǎn)畫一個(gè)藍(lán)色的圓圈,要記住的是返回結(jié)果的前三個(gè)值是輪廓點(diǎn)的索引。 所以我們還要到輪廓點(diǎn)中去找它們。

前三個(gè)值得含義分別為:凸缺陷的起始點(diǎn),凸缺陷的終點(diǎn),凸缺陷的最深點(diǎn)(即邊緣點(diǎn)到凸包距離最大點(diǎn))。

凸包檢測(cè)和凸缺陷檢測(cè)的代碼如下:

# 凸包檢測(cè)和凸缺陷
import cv2 as cv
# 讀取圖像
src1 = cv.imread("000.jpg")
# 轉(zhuǎn)換為灰度圖像
gray = cv.cvtColor(src1, cv.COLOR_BGR2GRAY)
# 二值化
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
# 獲取結(jié)構(gòu)元素
k = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
# 開(kāi)操作
binary = cv.morphologyEx(binary, cv.MORPH_OPEN, k)
# 輪廓發(fā)現(xiàn)
contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
# 在原圖上繪制輪廓,以方便和凸包對(duì)比,發(fā)現(xiàn)凸缺陷
cv.drawContours(src1, contours, -1, (0, 225, 0), 3)
for c in range(len(contours)):
    # 是否為凸包
    ret = cv.isContourConvex(contours[c])
    # 凸缺陷
    # 凸包檢測(cè),returnPoints為false的是返回與凸包點(diǎn)對(duì)應(yīng)的輪廓上的點(diǎn)對(duì)應(yīng)的index
    hull = cv.convexHull(contours[c], returnPoints=False)
    defects = cv.convexityDefects(contours[c], hull)
    print('defects', defects)
    for j in range(defects.shape[0]):
        s, e, f, d = defects[j, 0]
        start = tuple(contours[c][s][0])
        end = tuple(contours[c][e][0])
        far = tuple(contours[c][f][0])
        # 用紅色連接凸缺陷的起始點(diǎn)和終止點(diǎn)
        cv.line(src1, start, end, (0, 0, 225), 2)
        # 用藍(lán)色最遠(yuǎn)點(diǎn)畫一個(gè)圓圈
        cv.circle(src1, far, 5, (225, 0, 0), -1)
# 顯示
cv.imshow("result", src1)
cv.waitKey(0)
cv.destroyAllWindows()

凸缺陷的部分輸出:前三個(gè)為凸缺陷的起始點(diǎn),凸缺陷的終點(diǎn),凸缺陷的最深點(diǎn)(即邊緣點(diǎn)到凸包距離最大點(diǎn))。凸包檢測(cè)輸出的也是輪廓上的點(diǎn)的索引。

凸缺陷檢測(cè)的效果圖: 

紅色為凸包,藍(lán)色點(diǎn)為凸缺陷的最深點(diǎn)(即邊緣點(diǎn)到凸包距離最大點(diǎn)),綠色是輪廓。紅色與綠色之間的區(qū)域即為凸缺陷。

4、總結(jié)

(1)cv2.convexityDefect函數(shù)進(jìn)行凸缺陷檢測(cè)時(shí),凸包檢測(cè)函數(shù)中cv2.convexHull中的returnPoints要設(shè)置為False,返回輪廓中與凸包點(diǎn)對(duì)應(yīng)的輪廓點(diǎn)的index。

(2)cv2.convexityDefect函數(shù)的返回值是一系列數(shù)組,[凸缺陷的起點(diǎn),凸缺陷的終點(diǎn),凸缺陷的最深的點(diǎn),到最遠(yuǎn)點(diǎn)的近似距離],前三個(gè)是索引值,終點(diǎn)和起點(diǎn)連接即得到凸包。

(3)凸缺陷的最深的點(diǎn):即邊緣點(diǎn)到凸包距離最大點(diǎn)到最遠(yuǎn)點(diǎn)的近似距離:邊緣點(diǎn)到凸包的最大距離。

(4)利用凸包檢測(cè)可以得到進(jìn)一步的輪廓信息,可進(jìn)行邊界檢測(cè),結(jié)合凸缺陷可以實(shí)現(xiàn)手勢(shì)識(shí)別和物體識(shí)別。

以上就是OpenCV凸包檢測(cè)和凸缺陷學(xué)習(xí)示例的詳細(xì)內(nèi)容,更多關(guān)于OpenCV凸包檢測(cè)和凸缺陷的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • pycharm下打開(kāi)、執(zhí)行并調(diào)試scrapy爬蟲程序的方法

    pycharm下打開(kāi)、執(zhí)行并調(diào)試scrapy爬蟲程序的方法

    本篇文章主要介紹了pycharm下打開(kāi)、執(zhí)行并調(diào)試scrapy爬蟲程序的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 解決Keras TensorFlow 混編中 trainable=False設(shè)置無(wú)效問(wèn)題

    解決Keras TensorFlow 混編中 trainable=False設(shè)置無(wú)效問(wèn)題

    這篇文章主要介紹了解決Keras TensorFlow 混編中 trainable=False設(shè)置無(wú)效問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • python字典key不能是可以是啥類型

    python字典key不能是可以是啥類型

    在本篇文章里小編給大家整理了關(guān)于python字典key不能是可以是啥類型的相關(guān)知識(shí)點(diǎn),需要的朋友們可以參考下。
    2020-08-08
  • numpy.concatenate函數(shù)用法詳解

    numpy.concatenate函數(shù)用法詳解

    本文主要介紹了numpy.concatenate函數(shù)用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python的字典和列表的使用中一些需要注意的地方

    Python的字典和列表的使用中一些需要注意的地方

    這篇文章主要介紹了Python的字典和列表的使用中一些需要注意的地方,字典和列表的使用是Python學(xué)習(xí)當(dāng)中的基本功,需要的朋友可以參考下
    2015-04-04
  • python中entry用法講解

    python中entry用法講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python中entry用法講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • 學(xué)會(huì)使用Python?Configparser處理ini文件模塊

    學(xué)會(huì)使用Python?Configparser處理ini文件模塊

    這篇文章主要為大家介紹了使用Python?Configparser處理ini文件模塊的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 對(duì)python Tkinter Text的用法詳解

    對(duì)python Tkinter Text的用法詳解

    今天小編就為大家分享一篇對(duì)python Tkinter Text的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • python利用os模塊編寫文件復(fù)制功能——copy()函數(shù)用法

    python利用os模塊編寫文件復(fù)制功能——copy()函數(shù)用法

    這篇文章主要介紹了python利用os模塊編寫文件復(fù)制功能——copy()函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 一篇文章帶你了解谷歌這些大廠是怎么寫 python 代碼的

    一篇文章帶你了解谷歌這些大廠是怎么寫 python 代碼的

    這篇文章主要介紹了谷歌這些大廠怎么寫python代碼,我們寫代碼,往往還是按照其它語(yǔ)言的思維習(xí)慣來(lái)寫,那樣的寫法不僅運(yùn)行速度慢,代碼讀起來(lái)也費(fèi)盡,給人一種拖泥帶水的感覺(jué),需要的朋友可以參考下
    2021-09-09

最新評(píng)論