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

opencv 基礎(chǔ)54-利用形狀場景算法比較輪廓-cv2.createShapeContextDistanceExtractor()

這篇具有很好參考價值的文章主要介紹了opencv 基礎(chǔ)54-利用形狀場景算法比較輪廓-cv2.createShapeContextDistanceExtractor()。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

注意:新版本的opencv 4 已經(jīng)沒有這個函數(shù) cv2.createShapeContextDistanceExtractor()

形狀場景算法是一種用于比較輪廓或形狀的方法。這種算法通常用于計算兩個形狀之間的相似性或差異性,以及找到最佳的匹配方式。

下面是一種基本的比較輪廓的流程,使用了形狀場景算法:

  1. 數(shù)據(jù)準備: 首先,你需要準備兩個形狀的輪廓數(shù)據(jù)。輪廓可以表示為一系列的點坐標,或者更高級的表示方法,比如參數(shù)化的曲線等。

  2. 特征提取: 對于每個形狀,你可以使用形狀描述符或特征提取算法,將輪廓數(shù)據(jù)轉(zhuǎn)化為一組能夠表征形狀的數(shù)值特征。這些特征可以是形狀的曲率、長度、角度等等。

  3. 相似性度量: 選擇一個相似性度量方法來比較兩個形狀的特征。常見的方法包括歐氏距離、曼哈頓距離、余弦相似度等。這些度量方法將兩個形狀的特征轉(zhuǎn)化為一個相似性分數(shù),分數(shù)越高表示形狀越相似。

  4. 匹配與優(yōu)化: 如果你想要找到最佳的形狀匹配,可以使用優(yōu)化算法來調(diào)整一個形狀以使其與另一個形狀更加相似。這可能涉及到形狀的縮放、旋轉(zhuǎn)、平移等變換。

  5. 可視化與解釋: 最后,你可以可視化兩個形狀,展示它們的相似性以及在匹配過程中發(fā)生的變化。這可以通過繪制形狀、展示變換等方式來實現(xiàn)。

需要注意的是,形狀場景算法的選擇取決于你所處理的具體問題和數(shù)據(jù)。不同的算法可能在不同的場景下表現(xiàn)更佳。一些常用的形狀比較算法包括基于輪廓匹配的方法(如Frechet距離、Hausdorff距離)、基于特征的方法(如傅里葉描述符、輪廓矢量化等)、基于統(tǒng)計的方法(如Procrustes分析)等。

最終,選擇適合你問題需求的方法,并根據(jù)實際情況進行調(diào)整和優(yōu)化,以得到準確的形狀比較結(jié)果。

利用形狀場景算法比較輪廓與Hu 矩的區(qū)別

形狀場景算法和Hu矩都是用于比較輪廓或形狀的方法,但它們基于不同的原理和特征表示。

下面是它們之間的區(qū)別:

1. 原理和特征表示:

  • 形狀場景算法: 形狀場景算法基于整個形狀的輪廓信息,通常通過提取一系列特征點的坐標來表示輪廓,然后計算這些特征點之間的幾何關(guān)系、曲率等信息。這些算法可以比較兩個形狀之間的形狀變化、縮放、旋轉(zhuǎn)等變換。

  • Hu矩: Hu矩是一組與形狀相關(guān)的不變矩,用于描述對象的整體形狀特征。它們通過對輪廓的幾何矩進行變換和歸一化得到。Hu矩是一種用于表示形狀的緊湊形式,能夠在一定程度上保持形狀的平移、旋轉(zhuǎn)和縮放不變性。

2. 不變性:

  • 形狀場景算法: 形狀場景算法通常對形狀的幾何變換比較敏感,因此可能需要進行額外的處理來考慮形狀的平移、旋轉(zhuǎn)和縮放等變換。

  • Hu矩: Hu矩被設(shè)計用于保持一定的形狀不變性,它們對于平移、旋轉(zhuǎn)和縮放都具有一定程度的不變性。這使得Hu矩在某些形狀匹配和識別任務(wù)中非常有用。

3. 適用領(lǐng)域:

  • 形狀場景算法: 形狀場景算法適用于需要考慮形狀變換以及局部特征的情況。例如,可以用于比較兩個形狀的整體結(jié)構(gòu)和曲率變化。

  • Hu矩: Hu矩適用于需要保持形狀不變性的場景,例如對象識別、圖像檢索等。它們能夠在一定程度上解決形狀的旋轉(zhuǎn)、平移和縮放變化對比較造成的影響。

OpenCV 提供了使用“距離”作為形狀比較的度量標準。這是因為形狀之間的差異值和距離有相似之處,比如二者都只能是零或者正數(shù),又比如當兩個形狀一模一樣時距離值和差值都等于零。

OpenCV 提供了函數(shù) cv2.createShapeContextDistanceExtractor(),用于計算形狀場景距離。

其使用的“形狀上下文算法”在計算距離時,在每個點上附加一個“形狀上下文”描述符,讓每個點都能夠捕獲剩余點相對于它的分布特征,從而提供全局鑒別特征。

函數(shù) cv2.createShapeContextDistanceExtractor()的語法格式為:

retval = cv2.createShapeContextDistanceExtractor( [, nAngularBins[,
nRadialBins[, innerRadius[, outerRadius[, iterations[, comparer[,
transformer]]]]]]] )

式中的返回值為 retval,返回結(jié)果。
該結(jié)果可以通過函數(shù) cv2.ShapeDistanceExtractor.computeDistance()計算兩個不同形狀之間的距離。此函數(shù)的語法格式為:

retval=cv2.ShapeDistanceExtractor.computeDistance(contour1, contour2)

式中,coutour1 和 coutour2 是不同的輪廓。

函數(shù) cv2.createShapeContextDistanceExtractor()的參數(shù)都是可選參數(shù):

  • nAngularBins:為形狀匹配中使用的形狀上下文描述符建立的角容器的數(shù)量。
  • nRadialBins:為形狀匹配中使用的形狀上下文描述符建立的徑向容器的數(shù)量。
  • innerRadius:形狀上下文描述符的內(nèi)半徑。
  • outerRadius:形狀上下文描述符的外半徑。
  • iterations:迭代次數(shù)。
  • comparer:直方圖代價提取算子。該函數(shù)使用了直方圖代價提取仿函數(shù),可以直接采用
    直方圖代價提取仿函數(shù)的算子作為參數(shù)。
  • transformer:形狀變換參數(shù)。

示例:使用函數(shù) cv2.createShapeContextDistanceExtractor()計算形狀場景距離。

import cv2
#-----------原始圖像 o1 的邊緣--------------------
o1 = cv2.imread('cs.bmp')
cv2.imshow("original1",o1)
gray1 = cv2.cvtColor(o1,cv2.COLOR_BGR2GRAY)
ret, binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)
contours1, hierarchy = cv2.findContours(binary1,
 cv2.RETR_LIST,
 cv2.CHAIN_APPROX_SIMPLE)

cnt1 = contours1[0]
#-----------原始圖像 o2 的邊緣--------------------
o2 = cv2.imread('cs3.bmp')
cv2.imshow("original2",o2)
gray2 = cv2.cvtColor(o2,cv2.COLOR_BGR2GRAY)
ret, binary2 = cv2.threshold(gray2,127,255,cv2.THRESH_BINARY)
contours2, hierarchy = cv2.findContours(binary2,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

cnt2 = contours2[0]
#-----------原始圖像 o3 的邊緣--------------------
o3 = cv2.imread('hand.bmp')
cv2.imshow("original3",o3)
gray3 = cv2.cvtColor(o3,cv2.COLOR_BGR2GRAY)
ret, binary3 = cv2.threshold(gray3,127,255,cv2.THRESH_BINARY)
contours3, hierarchy = cv2.findContours(binary3,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
cnt3 = contours3[0]

#-----------構(gòu)造距離提取算子--------------------
sd = cv2.createShapeContextDistanceExtractor()

#-----------計算距離--------------------
d1 = sd.matchShapes(cnt1,cnt1)
print("與自身的距離 d1=", d1)
d2 = sd.matchShapes(cnt1,cnt2)
print("與旋轉(zhuǎn)縮放后的自身圖像的距離 d2=", d2)
d3 = sd.matchShapes(cnt1,cnt3)
print("與不相似對象的距離 d3=", d3)

cv2.waitKey()
cv2.destroyAllWindows()





運行后報錯:

opencv 基礎(chǔ)54-利用形狀場景算法比較輪廓-cv2.createShapeContextDistanceExtractor(),opencv,opencv,算法,人工智能文章來源地址http://www.zghlxwxcb.cn/news/detail-639577.html

到了這里,關(guān)于opencv 基礎(chǔ)54-利用形狀場景算法比較輪廓-cv2.createShapeContextDistanceExtractor()的文章就介紹完了。如果您還想了解更多內(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)文章

  • OpenCvSharp-輪廓形狀匹配/模板查找1.0(附源碼)

    目錄 前言: ?一、函數(shù)講解: 圖像閾值處理:Cv2.Threshold() 查找輪廓 Cv2.FindContours() 最小外接矩形 Cv2.BoundingRect(); 繪制輪廓 Cv2.DrawContours() ?計算輪廓相似度 Cv2.MatchShapes() 二、代碼(教學(xué)注釋詳細,仔細閱讀) 三、代碼過程總結(jié): 前言: 輪廓匹配是一種計算機視覺技術(shù)

    2024年02月02日
    瀏覽(17)
  • OpenCV基礎(chǔ)之邊緣檢測與輪廓描繪

    OpenCV基礎(chǔ)之邊緣檢測與輪廓描繪

    邊緣檢測:主要是通過一些手段檢測數(shù)字圖像中明暗變化劇烈(即梯度變化比較大)像素點,偏向于圖像中像素點的變化。 輪廓檢測:指在包含目標和背景的數(shù)字圖像中,忽略背景和目標內(nèi)部的紋理以及噪聲干擾的影響,采用一定的技術(shù)和方法來實現(xiàn)目標輪廓提取的過程。主

    2024年02月06日
    瀏覽(18)
  • opencv基礎(chǔ)53-圖像輪廓06-判斷像素點與輪廓的關(guān)系(輪廓內(nèi),輪廓上,輪廓外)cv2.pointPolygonTest()

    opencv基礎(chǔ)53-圖像輪廓06-判斷像素點與輪廓的關(guān)系(輪廓內(nèi),輪廓上,輪廓外)cv2.pointPolygonTest()

    在 OpenCV 中,函數(shù) cv2.pointPolygonTest()被用來計算點到多邊形(輪廓)的最短距離(也 就是垂線距離),這個計算過程又稱點和多邊形的關(guān)系測試。該函數(shù)的語法格式為: retval = cv2.pointPolygonTest( contour, pt, measureDist ) 式中的返回值為 retval,與參數(shù) measureDist 的值有關(guān)。 式中的參數(shù)

    2024年02月13日
    瀏覽(19)
  • Opencv算法記錄:如何使用Opencv求解圓與輪廓、直線的交點

    GUN C編譯器拓展語法學(xué)習(xí)筆記(一)GNU C特殊語法部分詳解 GUN C編譯器拓展語法學(xué)習(xí)筆記(二)屬性聲明 GUN C編譯器拓展語法學(xué)習(xí)筆記(三)內(nèi)聯(lián)函數(shù)、內(nèi)建函數(shù)與可變參數(shù)宏 數(shù)組存儲與指針學(xué)習(xí)筆記(一)數(shù)據(jù)類型與存儲、數(shù)據(jù)對齊、數(shù)據(jù)移植、typedef ??最近涉及到Opencv用來求

    2024年02月11日
    瀏覽(23)
  • opencv基礎(chǔ)55-獲取輪廓的特征值及示例

    opencv基礎(chǔ)55-獲取輪廓的特征值及示例

    輪廓自身的一些屬性特征及輪廓所包圍對象的特征對于描述圖像具有重要意義。本節(jié)介紹幾個輪廓自身的屬性特征及輪廓所包圍對象的特征。 可以使用寬高比(AspectRation)來描述輪廓,例如矩形輪廓的寬高比為: 示例:編寫程序計算矩形輪廓的寬高比。 運行結(jié)果: 同時,程

    2024年02月12日
    瀏覽(17)
  • 【Python】【OpenCV】凸輪廓和Douglas-Peucker算法

    【Python】【OpenCV】凸輪廓和Douglas-Peucker算法

    針對遇到的各種復(fù)雜形狀的主體,大多情況下,我們可以求得一個近似的多邊形來簡化視覺圖像處理,因為多邊形是由直線組成的,這樣就可以準確的劃分區(qū)域來便捷后續(xù)的操作。 ? cv2.arcLength() Method: 參數(shù): curve :要計算周長的輪廓,可以是一個矩形、圓形、多邊形等封閉

    2024年02月05日
    瀏覽(16)
  • opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours()

    opencv基礎(chǔ)48-繪制圖像輪廓并切割示例-cv2.drawContours()

    在 OpenCV 中,可以使用函數(shù) cv2.drawContours()繪制圖像輪廓。該函數(shù)的語法格式是: image=cv2.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]] ) 其中,函數(shù)的返回值為 image,表示目標圖像,即繪制了邊緣的原始圖像。 該函數(shù)有如下參數(shù): image:待

    2024年02月13日
    瀏覽(31)
  • opencv 基礎(chǔ)50-圖像輪廓學(xué)習(xí)03-Hu矩函數(shù)介紹及示例-cv2.HuMoments()

    opencv 基礎(chǔ)50-圖像輪廓學(xué)習(xí)03-Hu矩函數(shù)介紹及示例-cv2.HuMoments()

    Hu 矩(Hu Moments)是由計算機視覺領(lǐng)域的科學(xué)家Ming-Kuei Hu于1962年提出的一種圖像特征描述方法。這些矩是用于描述圖像形狀和幾何特征的不變特征,具有平移、旋轉(zhuǎn)和尺度不變性,適用于圖像識別、匹配和形狀分析等任務(wù)。 Ming-Kuei Hu在其論文中提出了七個用于形狀描述的獨特

    2024年02月13日
    瀏覽(26)
  • 【Python】【OpenCV】繪制外接矩形、外接圓 以及 凸輪廓和Douglas-Peucker算法

    ?外接矩形、外接圓: ? 1、cv2.boundingRect() Method 和 cv2.minAreaRect() Merhod:前者只尋找和 x、y軸 平行的矩形,后者則可以出現(xiàn)旋轉(zhuǎn)角度。 2、cv2.drawContours() Method:第二個參數(shù)接收的是輪廓信息,但是這個輪廓信息需要以 tuple or list or set類型(或者說是iterable)才可以傳入。 請注

    2024年02月05日
    瀏覽(101)
  • opencv識別不同形狀

    opencv識別不同形狀

    基本思路:將圖片轉(zhuǎn)化為灰度圖后,過濾出邊緣,并識別頂點,通過統(tǒng)計頂點的個數(shù)來判斷形狀 過濾出邊緣 識別圖片中形狀的邊緣 根據(jù)頂點數(shù)輸出形狀

    2024年02月15日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包