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

opencv(38) 圖像輪廓之七:橢圓擬合和直線擬合

這篇具有很好參考價值的文章主要介紹了opencv(38) 圖像輪廓之七:橢圓擬合和直線擬合。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 cv2.ellipse()橢圓擬合 (方向)

橢圓擬合法的基本思路是:對于給定平面上的一組樣本點,尋找一個橢圓,使其盡可能接近這些樣本點。也就是說,將圖像中的一組數(shù)據(jù)以橢圓方程為模型進行擬合,使某一橢圓方程盡量滿足這些數(shù)據(jù),并求出該橢圓方程的各個參數(shù)。

就橢圓擬合而言,就是先假設橢圓參數(shù),得到每個待擬合點到該橢圓的距離之和,也就是點到假設橢圓的誤差,求出使這個和最小的參數(shù)。

在OpenCV中,函數(shù)cv2.fitEllipse()可以用來構(gòu)建最優(yōu)擬合橢圓,還可以在返回值內(nèi)分別返回橢圓的中心點,軸長,旋轉(zhuǎn)角度信息。使用這種形式,能夠直觀地獲取橢圓的方向等信息。

函數(shù)原型:

(x,y),(MA,ma),angle = cv2.ellipse(points)

?ellipse = cv2.ellipse(points)

參數(shù):

  1. points: 待擬合直線的點的集合,可以是檢測處理輪廓結(jié)果

返回值:

  1. ellopse:橢圓
  2. (x,y):橢圓的中心點
  3. (MA,ma):橢圓水平方向軸與垂直方向軸的長度
  4. angle:橢圓的旋轉(zhuǎn)角度

2 cv2.fitLine()直線擬合

直線擬合就是將圖像中的對象擬合成一條直線過程,在OPenCV中擬合直線的API是:

函數(shù)原型:

output = cv2.fitLine(points, distType, param, reps, aeps)

參數(shù):

  1. points: 待擬合直線的點的集合,可以是檢測處理輪廓結(jié)果
  2. distType: 距離公式,在進行擬合是,要使輸入點到擬合直線的距離之和最小,常用的用以下幾種:cv2.DIST_L1: 曼哈頓距離;cv2.DIST_L2: 歐式距離;cv2.DIST_C:切比雪夫距離
  3. param距離參數(shù),可以設為0
  4. reps,aeps用于表示擬合曲線所需要的徑向和角度精度,通常設為0.01。

返回:

  1. output[vx,vy,x,y]1*4 的數(shù)組,前兩個表示直線的方向,即vy/vx表示斜率,后兩位表示直線上的一個點。

?3? 示例

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 1 圖像讀取
img = cv2.imread('C:/Users/xxx/Downloads/arrow.png')
img2 =img.copy()
imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 2 轉(zhuǎn)換為二值圖
ret,thresh = cv2.threshold(imgray,127,255,0)

# 3 輪廓提取
contours, hierarchy = cv2.findContours(thresh,1,2)

# 4 將輪廓繪制在圖像上
temp = np.zeros(img.shape, np.uint8)? # 生成黑背景
img1 = cv2.drawContours(temp, contours, -1, (0,0,255), 2)
cnt=contours[0]

# 5 橢圓擬合
ellipse = cv2.fitEllipse(cnt)
img2 = cv2.ellipse(img2,ellipse,(0,255,0),2)

# 6 直線擬合
rows,cols = img.shape[:2]
[vx,vy,x,y] = cv2.fitLine(cnt, cv2.DIST_L2,0,0.01,0.01)
lefty = int((-x*vy/vx) + y)
righty = int(((cols-x)*vy/vx)+y)
img2 = cv2.line(img2,(cols-1,righty),(0,lefty),(255,0,0),2)
?
# 7 圖像顯示
names = ['原圖','輪廓檢測結(jié)果','橢圓、直線擬合']
images =? [img,img1,img2]

plt.figure(figsize=(25.6,9.6))
for i in range(1):
??? for j in range(3):
??????? plt.subplot(1,3,i*3+j+1),plt.imshow(images[i*3+j])
??????? plt.title(names[i*3+j],fontsize=30), plt.xticks([]), plt.yticks([])
??????? num=i*3+j
??????? if num >= len(names)-1:
??????????? break

plt.show()

運行結(jié)果如下:

opencv橢圓擬合,opencv,人工智能,計算機視覺文章來源地址http://www.zghlxwxcb.cn/news/detail-756355.html

到了這里,關(guān)于opencv(38) 圖像輪廓之七:橢圓擬合和直線擬合的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Opencv(C++)筆記--繪制直線、矩形、橢圓、圓、填充多邊形、繪制字體和隨機產(chǎn)生坐標點

    Opencv(C++)筆記--繪制直線、矩形、橢圓、圓、填充多邊形、繪制字體和隨機產(chǎn)生坐標點

    目錄 1--cv::line()繪制直線 2--cv::Rect()繪制矩形 3--cv::ellipse()繪制橢圓 4--cv::circle()繪制圓 5--cv::fillPoly()填充多邊形 6--cv::putText()繪制字體 6--cv::RNG隨機產(chǎn)生坐標點 使用 cv::Point p1 定義坐標點; 使用 cv::line() 繪制直線,傳入的參數(shù)依次為:背景圖、兩個點的坐標、直線的顏色、直線

    2024年02月14日
    瀏覽(117)
  • OpenCV(三十七):擬合直線、三角形和圓形

    OpenCV(三十七):擬合直線、三角形和圓形

    1.點集擬合的含義 ? ? ? ?點集擬合是一種通過擬合函數(shù)或曲線來近似描述給定離散數(shù)據(jù)點的技術(shù),在點集擬合中,可以使用不同的函數(shù)或曲線擬合方法來擬合直線、三角形和圓形。 直線擬合 :對于給定的二維數(shù)據(jù)點集合,可以使用最小二乘法來擬合一條直線。 三角形擬合

    2024年02月03日
    瀏覽(27)
  • 【OpenCV-Python】——邊緣和輪廓&Laplacian/Sobel/Canny邊緣檢測&查找/繪制輪廓及輪廓特征&霍夫直線/圓變換

    【OpenCV-Python】——邊緣和輪廓&Laplacian/Sobel/Canny邊緣檢測&查找/繪制輪廓及輪廓特征&霍夫直線/圓變換

    目錄 前言: 1、邊緣檢測 1.1 Laplacian邊緣檢測 ?1.2 Sobel邊緣檢測 ?1.3 Canny邊緣檢測 2、圖像輪廓 2.1 查找輪廓 ?2.2 繪制輪廓 2.3 輪廓特征 3、霍夫變換 3.1 霍夫直線變換 ?3.2 霍夫圓變換 總結(jié): 圖像的邊緣是指圖像中灰度值急劇變化的位置,邊緣檢測的目的是為了繪制邊緣線條。

    2024年01月23日
    瀏覽(22)
  • OpenCV快速入門:目標檢測——輪廓檢測、輪廓的距、點集擬合和二維碼檢測

    OpenCV快速入門:目標檢測——輪廓檢測、輪廓的距、點集擬合和二維碼檢測

    在當今數(shù)字化時代,計算機視覺的崛起使得目標檢測成為科技領(lǐng)域中的一項關(guān)鍵技術(shù)。本文將帶您快速入門OpenCV中的目標檢測,深入探討輪廓檢測、輪廓的距、點集擬合以及二維碼檢測等核心概念。 OpenCV,作為一種強大的開源計算機視覺庫,為開發(fā)者提供了豐富的工具和算法

    2024年01月16日
    瀏覽(34)
  • Opencv之RANSAC算法用于直線擬合及特征點集匹配詳解

    Opencv之RANSAC算法用于直線擬合及特征點集匹配詳解

    講述Ransac擬合與最小二乘在曲線擬合上的優(yōu)缺點 講述在進行特征點匹配時,最近鄰匹配與Ransac匹配的不同之處 另外,Ransac也被用于橢圓擬合、變換矩陣求解等 1.1 原理 RANSAC(RANdom SAmple Consensus,隨機采樣一致)算法是從一組含有“外點”(outliers)的數(shù)據(jù)中正確估計數(shù)學模型參數(shù)的

    2024年02月05日
    瀏覽(38)
  • 利用OpenCV與Qt5構(gòu)建卡尺擬合直線工具(C++實現(xiàn))

    利用OpenCV與Qt5構(gòu)建卡尺擬合直線工具(C++實現(xiàn))

    基于OpenCV與Qt5構(gòu)建卡尺擬合直線工具 博主近期基于??礦ision Master4.0做了一個工業(yè)視覺工程項目,其中就使用到了海康VM的找直線工具,然后博主根據(jù)其中的技術(shù)原理,也仿照開發(fā)了一個類似的功能,基于OpenCV和Qt5構(gòu)建一個卡尺找直線的工具??ǔ哒抑本€是在計算機視覺領(lǐng)域中

    2024年02月08日
    瀏覽(120)
  • OpenCV(10): 輪廓近似—多邊形擬合,邊界矩形與邊界圓形

    OpenCV(10): 輪廓近似—多邊形擬合,邊界矩形與邊界圓形

    輪廓近似(Contour Approximation)是指對輪廓進行逼近或擬合,得到近似的輪廓。在圖像處理中,輪廓表示了圖像中物體的邊界,因此輪廓近似可以用來描述和識別物體的形狀。 多邊形擬合(Approximating Polygons)是將輪廓逼近成一個由直線段構(gòu)成的多邊形。常見的有最小包圍矩形

    2024年02月10日
    瀏覽(117)
  • opencv--輪廓擬合函數(shù) boundingRect(),minAreaRect(),minEnclosingCircle(),fitEllipse(),fitLine()

    opencv--輪廓擬合函數(shù) boundingRect(),minAreaRect(),minEnclosingCircle(),fitEllipse(),fitLine()

    目錄 1.cv2.boundingRect() 2.cv2.minAreaRect() 3. cv2.minEnclosingCircle() 4.cv2.fitEllipse() ?5.cv2.fitLine() ? 在計算輪廓時,可能并不需要實際的輪廓,而僅需要一個接近于輪廓的近似多邊形。OpenCV提供了多種計算輪廓近似多邊形的方法。 能夠返回包圍輪廓的矩形的邊界信息。 函數(shù)樣式: retv

    2024年02月16日
    瀏覽(83)
  • 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)
  • C++opencv找圓心?看著一篇,一定有你要(邊緣輪廓檢測,擬合,凸包)找出相應的輪廓或者全部輪廓畫外界圓輪廓并且標出輪廓中心

    C++opencv找圓心?看著一篇,一定有你要(邊緣輪廓檢測,擬合,凸包)找出相應的輪廓或者全部輪廓畫外界圓輪廓并且標出輪廓中心

    注意這種面積篩選有一個弊端就是比如有兩個輪廓, A輪廓為500 B輪廓為300 當面積設置為 area400時就可以篩選出面積小于300的所有輪廓 反之大于300的輪廓 如果有兩個圓輪廓一大一小,可能就只能保留一個了 如果知道這兩個形狀的輪廓面積,或許可以利用 邏輯與? 進行篩選。

    2024年02月11日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包