国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

改進的最大內(nèi)切圓算法求裂縫輪廓寬度

這篇具有很好參考價值的文章主要介紹了改進的最大內(nèi)切圓算法求裂縫輪廓寬度。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前段時間我將網(wǎng)上最大內(nèi)切圓算法進行了代碼的整理,原先博主上傳的代碼稍微有點亂,可能也是它自己使用,大家可以看這篇整理好的:最大內(nèi)切圓算法計算裂縫寬度。

最大內(nèi)切圓算法詳解

一個圓與給定的多邊形或曲線的每一條邊或曲線都相切的圓。而我們就是需要計算的是給定圖像的輪廓的最大內(nèi)切圓,也就是與輪廓的每一條邊都相切的圓中直徑最大的圓。這樣直徑就是我們的輪廓的寬度了。

既然要求輪廓的內(nèi)接圓,從圓的特點來說,想要唯一的確定一個圓,就是要知道它的圓心和半徑。好的,那現(xiàn)在的問題就從求取輪廓的內(nèi)接圓,巧妙地轉(zhuǎn)變成求取某個點和一個多邊形的距離和關(guān)系。

在opencv中有一個函數(shù)pointPolygonTest就是能夠得到某個點和某個多邊形之間的關(guān)系,例如這個點是在多邊形內(nèi)部、外部、或者是在多邊形上,還能得到該點距離多邊形的像素距離。那問題其實就很好解決了。我們再使用cv2.minMaxLoc(src)來獲得給定的數(shù)組中尋找最小值和最大值的位置,它的語法如下

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(src)

其中,src是輸入的數(shù)組或圖像。函數(shù)會返回最小值min_val和最大值max_val,以及它們在數(shù)組中的位置最小值的位置min_loc和最大值的位置max_loc。?

講到這里我想大家也知道怎么求輪廓的寬度了吧,即為:max_loc * 2。

詳細代碼

import cv2
import string
import numpy as np
import pyzjr as pz

def incircle(img, contours_arr, color=(0, 0, 255)):
    """
    輪廓最大內(nèi)切圓算法,所有輪廓當(dāng)中的內(nèi)切圓
    """
    result = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
    raw_dist = np.zeros(img.shape, dtype=np.float32)
    letters = list(string.ascii_uppercase)
    label = {}
    for k, contours in enumerate(contours_arr):
        for i in range(img.shape[0]):
            for j in range(img.shape[1]):
                raw_dist[i, j] = cv2.pointPolygonTest(contours, (j, i), True)
        min_val, max_val, _, max_dist_pt = cv2.minMaxLoc(raw_dist)
        label[letters[k]] = max_val * 2
        radius = int(max_val)
        cv2.circle(result, max_dist_pt, radius, color, 1, 1, 0)

    return result, label


if __name__=="__main__":
    path = r"D:\PythonProject\RoadCrack\dimension2_data\num/001.png"
    img = cv2.imread(path)
    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    thresh = pz.BinaryImg(img)
    contours_arr, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

    result, label = incircle(gray_img, contours_arr)
    print("裂縫寬度:",label)
    cv2.imwrite("result.png",result)

先檢測輪廓,你可以使用opencv的findContours。需要確保是ndarray數(shù)組的形式。

裂縫寬度: {'A': 5.656854152679443, 'B': 4.4721360206604}

改進的最大內(nèi)切圓算法求裂縫輪廓寬度,二維檢測,算法,opencv

現(xiàn)在我們就能知道兩條裂縫對應(yīng)的最大內(nèi)切圓直徑,即裂縫的寬度。

算法對比

并且從時間角度來看:

  • 原先的最大內(nèi)切圓算法: 1.79125 sec
  • 改進后的內(nèi)切圓算法:??1.05487 sec

從計算的直徑上來看:

  • 原先的最大內(nèi)切圓算法:13.81
  • 改進后的內(nèi)切圓算法:{'A': 14.0}

這里的實現(xiàn)比較簡單,只是嵌套的循環(huán)比較多,但能存儲每條裂縫對應(yīng)的寬度。文章來源地址http://www.zghlxwxcb.cn/news/detail-730674.html


2023/10/22更新
# pip install pyzjr==1.2.5
import cv2
import pyzjr as pz
from pyzjr.augmentation import incircle

if __name__=="__main__":
    path = r"D:\PythonProject\RoadCrack\dimension2_data\num/001.png"
    img = cv2.imread(path)
    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    thresh = pz.BinaryImg(img)
    contours_arr, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

    result, label = incircle(gray_img, contours_arr)
    print("裂縫寬度:",label)
    cv2.imwrite("result.png",result)

到了這里,關(guān)于改進的最大內(nèi)切圓算法求裂縫輪廓寬度的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • OpenCV(三十四):輪廓外接最大、最小矩形和多邊形擬合

    OpenCV(三十四):輪廓外接最大、最小矩形和多邊形擬合

    目錄 1.輪廓外接最大矩形boundingRect() 2.輪廓外接最小矩形minAreaRect() 3.輪廓外接多邊形approxPolyDP() 1.輪廓外接最大矩形boundingRect() Rect cv::boundingRect ( InputArray array ) array:輸入的灰度圖像或者2D點集,數(shù)據(jù)類型為vectorPoint或者Mat。 示例代碼: ?輪廓外接最大矩形的結(jié)果: 2.輪廓外接

    2024年02月09日
    瀏覽(301)
  • 改進的KMeans 點云聚類算法 根據(jù)體元中的點數(shù)量計算點密度,并獲取前K個點密度最大的體元作為初始聚類中心(附 matlab 代碼)

    KMeans函數(shù)的主要邏輯如下: 使用InitCenter函數(shù)初始化聚類中心,該函數(shù)根據(jù)體元密度選擇初始聚類中心。該函數(shù)的輸入?yún)?shù)包括數(shù)據(jù)(data)、聚類中心數(shù)量(centerNum)和體元數(shù)量(voxelNum)。 根據(jù)點云的取值范圍計算包圍盒的體積(V)和體元邊長(d)。 根據(jù)體元邊長將點云

    2024年02月10日
    瀏覽(20)
  • 【畢業(yè)設(shè)計】基于深度學(xué)習(xí)的道路裂縫識別算法系統(tǒng) python 卷積神經(jīng)網(wǎng)絡(luò) 人工智能

    【畢業(yè)設(shè)計】基于深度學(xué)習(xí)的道路裂縫識別算法系統(tǒng) python 卷積神經(jīng)網(wǎng)絡(luò) 人工智能

    目錄 ?前言 設(shè)計思路 一、課題背景與意義 二、算法理論原理 2.1 卷積神經(jīng)網(wǎng)絡(luò) 2.1 YOLOv5算法 三、道路裂縫檢測的實現(xiàn) 3.1 數(shù)據(jù)集 3.2 實驗環(huán)境及參數(shù)設(shè)置? 3.2 實驗及結(jié)果分析 實現(xiàn)效果圖樣例 最后 ? ? ? ???大四是整個大學(xué)期間最忙碌的時光,一邊要忙著備考或?qū)嵙?xí)為畢業(yè)后

    2024年03月24日
    瀏覽(35)
  • 【前端可視化】postcss-px-to-viewport 適配怎么限制最大寬度?使用 postcss-mobile-forever

    【前端可視化】postcss-px-to-viewport 適配怎么限制最大寬度?使用 postcss-mobile-forever

    自己用 nuxt3 寫官網(wǎng)發(fā)現(xiàn)用 postcss-px-to-viewport 這個插件雖然能夠?qū)崿F(xiàn)基于 vw 的響應(yīng)式,但是無法做到限制寬度,比如設(shè)計稿 1920p,我只想讓最大縮放比例為 1920p,不能超過,就無法實現(xiàn)了。 純 css 的話,有兩個辦法,一種用 px 生成兩套代碼,一套移動端的 vw 視圖,一套最大寬

    2024年01月24日
    瀏覽(26)
  • 【CSS 08】display 控制布局 塊級元素 行內(nèi)元素 隱藏元素 結(jié)合JS 最大寬度 瀏覽器窗口 定位 position z-index 堆疊

    說在前面 CSS基礎(chǔ)教程系列已經(jīng)結(jié)束,接下來就是中級教程,讓我們跟上腳步,繼續(xù)努力吧! 并且最近臨近期末考試,后面十天休刊… display display 屬性是用于控制布局的最重要的 CSS 屬性 display 屬性規(guī)定是否/如何顯示元素 隱藏元素 - display:none 還是 visibility:hidden 通過將 disp

    2024年02月08日
    瀏覽(26)
  • Python——Kmeans聚類算法、輪廓系數(shù)(算法理論、代碼)

    Python——Kmeans聚類算法、輪廓系數(shù)(算法理論、代碼)

    目錄 1 Kmeans模型理論 1.1 K-均值算法(K-means)算法概述 1.2?距離度量 1.3?K-means算法流程 1.4?K值的選擇 1.5?K-means的優(yōu)點 1.6?K-means的缺點 1.7?聚類的評價指標(biāo) 2 代碼解釋 3 實操? 3.1 構(gòu)建聚類數(shù)目為3的KMeans模型 3.2 占比餅圖 3.3 輪廓系數(shù)值 3.4 使用for循環(huán)計算聚類個數(shù)為2至9時的輪廓

    2024年02月01日
    瀏覽(83)
  • 算法:BFS寬度優(yōu)先遍歷

    算法:BFS寬度優(yōu)先遍歷

    本篇總結(jié)的是BFS算法,BFS算法相比起DFS算法來說還是比較簡單的 這里提供一種雙端隊列的做法,也可以在合適的層數(shù)逆序

    2024年02月21日
    瀏覽(25)
  • 寬度優(yōu)先搜索算法(BFS)

    寬度優(yōu)先搜索算法(BFS)

    寬度優(yōu)先搜索算法(BFS) (也稱為 廣度優(yōu)先搜索 )主要運用于樹、圖和矩陣(這三種可以都歸類在圖中),用于在圖中從起始頂點開始 逐層 地向外探索,直到找到目標(biāo)頂點為止。 在本篇文章中,我們主要討論其在 樹 中的運用 樹的寬度優(yōu)先搜索 即 樹的層序遍歷 :逐層訪

    2024年03月12日
    瀏覽(22)
  • WPF 筆跡算法 從點集轉(zhuǎn)筆跡輪廓

    本文將告訴大家一些筆跡算法,從用戶輸入的點集,即鼠標(biāo)軌跡點或觸摸軌跡點等,轉(zhuǎn)換為一個可在界面繪制顯示筆跡畫面的基礎(chǔ)數(shù)學(xué)算法。盡管本文標(biāo)記的是 WPF 的筆跡算法,然而實際上本文更側(cè)重基礎(chǔ)數(shù)學(xué)計算,理論上可以適用于任何能夠支持幾何繪制的 UI 框架上,包括

    2024年02月08日
    瀏覽(17)
  • 墻地磚外形檢測的技術(shù)方案-外部輪廓檢測算法

    墻地磚外形檢測的技術(shù)方案-外部輪廓檢測算法

    Ramer算法 利用Canny算子得到墻地磚輪廓后,必須進一步將輪廓線精確分段成墻地磚的四條邊,從而可得到墻地磚輪廓尺寸、邊直度和直角度指標(biāo)。采用如下算法實現(xiàn): 第1,選擇較高閾值,利用ramer算法將輪廓線用多邊形(Polygon)近似。 第2,如果多個輪廓直線段能被圓弧近似

    2024年01月18日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包