最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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è)置為T(mén)rue,輸出的凸包是順時(shí)針?lè)较虻模駝t為逆時(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)畫(huà)一個(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)畫(huà)一個(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)文章

最新評(píng)論

卢龙县| 阿鲁科尔沁旗| 巩义市| 石门县| 武陟县| 北川| 大名县| 岑溪市| 湘阴县| 东台市| 和林格尔县| 乌鲁木齐县| 三河市| 乐业县| 和田市| 马龙县| 龙海市| 新巴尔虎左旗| 额济纳旗| 寻乌县| 沧源| 合肥市| 于田县| 河北省| 衡山县| 麦盖提县| 沭阳县| 衡阳县| 珲春市| 衡阳市| 淄博市| 莱芜市| 台前县| 洛宁县| 平湖市| 开原市| 三河市| 西吉县| 中山市| 阳江市| 泗水县|