1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        基于Python的OpenCV輪廓檢測(cè)聚類

        共 3028字,需瀏覽 7分鐘

         ·

        2022-01-14 21:21

        點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時(shí)間送達(dá)

        簡(jiǎn)介


        OpenCV的“findContours”功能經(jīng)常被計(jì)算機(jī)視覺工程師用來檢測(cè)物體。OpenCV的存在,使得我們只需要編寫幾行代碼就可以檢測(cè)輪廓(對(duì)象)。然而,OpenCV檢測(cè)到的輪廓通常是分散的。例如,一個(gè)功能豐富的圖像可能有數(shù)百到數(shù)千個(gè)輪廓,但這并不意味著圖像中有那么多對(duì)象。一些屬于同一對(duì)象的輪廓是單獨(dú)檢測(cè)的,因此我們感興趣的是對(duì)它們進(jìn)行分組,使一個(gè)輪廓對(duì)應(yīng)一個(gè)對(duì)象。


        實(shí)現(xiàn)思路


        當(dāng)我在項(xiàng)目中遇到這個(gè)問題時(shí),我花了很多時(shí)間嘗試使用不同的參數(shù)或不同的OpenCV函數(shù)來檢測(cè)輪廓,但沒有一個(gè)有效。然后,我做了更多的研究,在OpenCV的論壇上找到了一篇帖子,它提到了凝聚聚類。但是,沒有給出源代碼。我還發(fā)現(xiàn)sklearn支持聚合聚類,但我沒有使用它,原因有兩個(gè):

        1. 這個(gè)功能對(duì)我來說似乎很復(fù)雜。我不知道如何輸入正確的參數(shù),我懷疑輪廓檢測(cè)的數(shù)據(jù)類型是否適合該函數(shù)。
        2. 我需要使用python 2.7、OpenCV 3.3.1和Numpy 1.11.3。它們與sklearn的版本(0.20+)不兼容,后者支持聚類。



        源代碼


        為了分享我編寫的函數(shù),我在Github中對(duì)其進(jìn)行了開源,并將其作為要點(diǎn)發(fā)布在下面。以下版本適用于Python3,若需要要在Python2.7中使用它,只需將“range”更改為“xrange”。

        #!/usr/bin/env python3
        import osimport cv2import numpy
        def calculate_contour_distance(contour1, contour2): x1, y1, w1, h1 = cv2.boundingRect(contour1) c_x1 = x1 + w1/2 c_y1 = y1 + h1/2
        x2, y2, w2, h2 = cv2.boundingRect(contour2) c_x2 = x2 + w2/2 c_y2 = y2 + h2/2
        return max(abs(c_x1 - c_x2) - (w1 + w2)/2, abs(c_y1 - c_y2) - (h1 + h2)/2)
        def merge_contours(contour1, contour2): return numpy.concatenate((contour1, contour2), axis=0)
        def agglomerative_cluster(contours, threshold_distance=40.0): current_contours = contours while len(current_contours) > 1: min_distance = None min_coordinate = None
        for x in range(len(current_contours)-1): for y in range(x+1, len(current_contours)): distance = calculate_contour_distance(current_contours[x], current_contours[y]) if min_distance is None: min_distance = distance min_coordinate = (x, y) elif distance < min_distance: min_distance = distance min_coordinate = (x, y)
        if min_distance < threshold_distance: index1, index2 = min_coordinate current_contours[index1] = merge_contours(current_contours[index1], current_contours[index2]) del current_contours[index2] else: break
        return current_contours

        注意:

        • “calculate_contour_distance”函數(shù)獲取輪廓的邊界框,并計(jì)算兩個(gè)矩形之間的距離。

        • “merge_contours”函數(shù),我們只需使用'numpy.concatenate'即可,因?yàn)槊總€(gè)輪廓只是一個(gè)點(diǎn)的numpy數(shù)組。

        • 使用聚類算法,我們不需要事先知道有多少個(gè)聚類。相反,可以向函數(shù)提供閾值距離,例如40個(gè)像素,因此如果所有輪廓中最近的距離大于閾值,則函數(shù)將停止處理。


        結(jié)果


        要可視化集群效果,請(qǐng)參見下面的兩幅圖像。第一幅圖像顯示最初檢測(cè)到12個(gè)輪廓,聚類后只剩下4個(gè)輪廓,如第二幅圖像所示。這兩個(gè)小對(duì)象是由于噪聲造成的,它們沒有合并,因?yàn)榕c閾值距離相比,它們離太遠(yuǎn)。




        GITHUB代碼鏈接:

        https://github.com/CullenSUN/fish_vision/blob/master/obstacle_detector_node/src/opencv_utils.py


        下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
        在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
        小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

        下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
        小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

        交流群


        歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


        瀏覽 63
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            中国美女一级特黄大片高清播放↗ 自拍偷拍在线第一页 | 久久99久久99久久99人受 | 一级一级a爱片免费兔兔软件 | www黄色小说 | 性鲍视频 内射 | 我被男人cao了几天几夜 | 亚洲插菊花综合网 | 自拍偷拍影音先锋 | 免费无码精品久久久嫩青 | 91搞黄视频 |