欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)

 更新時(shí)間:2021年08月26日 11:05:04   作者:ahaofan  
最近開(kāi)始學(xué)習(xí)opencv,想檢測(cè)圖片上的圓環(huán),發(fā)現(xiàn)霍夫變換可以做這樣的效果出來(lái),于是嘗試用霍夫變換做了下圓環(huán)檢測(cè),這篇文章主要給大家介紹了基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)的相關(guān)資料,需要的朋友可以參考下

簡(jiǎn)述

基于python使用opencv實(shí)現(xiàn)在一張圖片中檢測(cè)出圓形,并且根據(jù)坐標(biāo)和半徑標(biāo)記出圓。不涉及理論,只講應(yīng)用。

霍夫變換檢測(cè)圓形的原理

其實(shí)檢測(cè)圓形和檢測(cè)直線的原理差別不大,只不過(guò)直線是在二維空間,因?yàn)閥=kx+b,只有k和b兩個(gè)自由度。而圓形的一般性方程表示為(x-a)²+(y-b)²=r²。那么就有三個(gè)自由度圓心坐標(biāo)a,b,和半徑r。這就意味著需要更多的計(jì)算量,而OpenCV中提供的cvHoughCircle()函數(shù)里面可以設(shè)定半徑r的取值范圍,相當(dāng)于有一個(gè)先驗(yàn)設(shè)定,在每一個(gè)r來(lái)說(shuō),在二維空間內(nèi)尋找a和b就可以了,能夠減少計(jì)算量。

相關(guān)函數(shù)

函數(shù)說(shuō)明:

Python: cv2.HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) → circles

參數(shù)說(shuō)明:

  • image- 8位,單通道,灰度輸入圖像。
  • circles- 找到的圓的輸出向量。每個(gè)向量被編碼為3元素的浮點(diǎn)向量 (x,y,半徑)。
  • circle_storage - 在C函數(shù)中,這是一個(gè)將包含找到的圓的輸出序列的內(nèi)存存儲(chǔ)。
  • method- 使用檢測(cè)方法。目前,唯一實(shí)現(xiàn)的方法是 CV_HOUGH_GRADIENT,基本上是 21HT,在[Yuen90]中有描述 。
  • dp - 累加器分辨率與圖像分辨率的反比。例如,如果 dp = 1,則累加器具有與輸入圖像相同的分辨率。如果 dp = 2,則累加器的寬度和高度都是一半。
  • minDist -檢測(cè)到的圓的中心之間的最小距離。如果參數(shù)太小,除了真正的參數(shù)外,可能會(huì)錯(cuò)誤地檢測(cè)到多個(gè)鄰居圈。如果太大,可能會(huì)錯(cuò)過(guò)一些圈子。
  • param1 - 第一個(gè)方法特定的參數(shù)。在CV_HOUGH_GRADIENT的情況下, 兩個(gè)傳遞給Canny()邊緣檢測(cè)器的閾值較高(較小的兩個(gè)小于兩倍)。
  • param2 - 第二種方法參數(shù)。在CV_HOUGH_GRADIENT的情況下,它是檢測(cè)階段的圓心的累加器閾值。越小,可能會(huì)檢測(cè)到越多的虛假圈子。首先返回對(duì)應(yīng)于較大累加器值的圈子。
  • minRadius -最小圓半徑。
  • maxRadius - 最大圓半徑。

這是根據(jù)opencv官方文檔谷歌翻譯過(guò)來(lái)的,參數(shù)比較多,但用的時(shí)候只修改一些主要的,傳入的圖像和最大最小圓半徑,以達(dá)到檢測(cè)出想要的圓的效果。

還有要注意函數(shù)的返回值

找到的圓的輸出向量。每個(gè)向量被編碼為3元素的浮點(diǎn)向量 (x,y,半徑)。

這句話不是很好理解,我們直接輸出返回值就會(huì)發(fā)現(xiàn)是個(gè) 三層嵌套list,最內(nèi)層list有三個(gè)元素,分別是圓心的行,列,半徑,這表示一個(gè)圓的基本信息。多個(gè)圓基本信息組成了一個(gè)新的list,這個(gè)list包含了檢測(cè)到的所有圓,即長(zhǎng)度就是檢測(cè)到圓的個(gè)數(shù)。最外層再加了個(gè)list,至于干啥的不清楚了,不影響使用就好。

下圖是輸出函數(shù)返回值的一個(gè)實(shí)例圖

實(shí)例演示

完整代碼

import  cv2

#載入并顯示圖片
img=cv2.imread('circle.png')
cv2.imshow('img',img)
#灰度化
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#輸出圖像大小,方便根據(jù)圖像大小調(diào)節(jié)minRadius和maxRadius
print(img.shape)
#霍夫變換圓檢測(cè)
circles= cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,100,param1=100,param2=30,minRadius=5,maxRadius=300)
#輸出返回值,方便查看類型
print(circles)
#輸出檢測(cè)到圓的個(gè)數(shù)
print(len(circles[0]))

print('-------------我是條分割線-----------------')
#根據(jù)檢測(cè)到圓的信息,畫出每一個(gè)圓
for circle in circles[0]:
    #圓的基本信息
    print(circle[2])
    #坐標(biāo)行列
    x=int(circle[0])
    y=int(circle[1])
    #半徑
    r=int(circle[2])
    #在原圖用指定顏色標(biāo)記出圓的位置
    img=cv2.circle(img,(x,y),r,(0,0,255),-1)
#顯示新圖像
cv2.imshow('res',img)

#按任意鍵退出
cv2.waitKey(0)
cv2.destroyAllWindows()

運(yùn)行結(jié)果

shell輸出截圖

總結(jié)

到此這篇關(guān)于基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)的文章就介紹到這了,更多相關(guān)OpenCV霍夫變換圓形檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用jenkins發(fā)送企業(yè)微信通知的實(shí)現(xiàn)

    python使用jenkins發(fā)送企業(yè)微信通知的實(shí)現(xiàn)

    公司使用的是企業(yè)微信,因此考慮Jenkins通知企業(yè)微信機(jī)器人的實(shí)現(xiàn)方式,本文主要介紹了python使用jenkins發(fā)送企業(yè)微信通知的實(shí)現(xiàn),感興趣的可以了解一下
    2021-06-06
  • Java ExcutorService優(yōu)雅關(guān)閉方式解析

    Java ExcutorService優(yōu)雅關(guān)閉方式解析

    這篇文章主要介紹了Java ExcutorService優(yōu)雅關(guān)閉方式解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python 腳本生成隨機(jī) 字母 + 數(shù)字密碼功能

    python 腳本生成隨機(jī) 字母 + 數(shù)字密碼功能

    本文通過(guò)一小段簡(jiǎn)單的代碼給大家分享基于python 腳本生成隨機(jī) 字母 + 數(shù)字密碼功能,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Python實(shí)現(xiàn)的拉格朗日插值法示例

    Python實(shí)現(xiàn)的拉格朗日插值法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的拉格朗日插值法,簡(jiǎn)單介紹了拉格朗日插值法的原理并結(jié)合完整實(shí)例形式給出了拉格朗日插值法的具體實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-01-01
  • python實(shí)現(xiàn)隨機(jī)密碼字典生成器示例

    python實(shí)現(xiàn)隨機(jī)密碼字典生成器示例

    這篇文章主要介紹了python實(shí)現(xiàn)隨機(jī)密碼字典生成器示例,需要的朋友可以參考下
    2014-04-04
  • 使用pyscript在網(wǎng)頁(yè)中撰寫Python程式的方法

    使用pyscript在網(wǎng)頁(yè)中撰寫Python程式的方法

    本文主要介紹了使用pyscript在網(wǎng)頁(yè)中撰寫Python程式的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Django mysqlclient安裝和使用詳解

    Django mysqlclient安裝和使用詳解

    這篇文章主要介紹了Django mysqlclient安裝和使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 8個(gè)Python必備的PyCharm插件(附下載地址)

    8個(gè)Python必備的PyCharm插件(附下載地址)

    Python是一種廣泛使用的編程語(yǔ)言,PyCharm是最受歡迎的Python IDE之一,本文就來(lái)介紹一下8個(gè)Python必備的PyCharm插件,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • python 字典和列表嵌套用法詳解

    python 字典和列表嵌套用法詳解

    python中字典和列表的使用,在數(shù)據(jù)處理中應(yīng)該是最常用的,今天通過(guò)多種場(chǎng)景給大家分享python 字典和列表嵌套用法,感興趣的朋友一起看看吧
    2021-06-06
  • python?DataFrame數(shù)據(jù)分組統(tǒng)計(jì)groupby()函數(shù)的使用

    python?DataFrame數(shù)據(jù)分組統(tǒng)計(jì)groupby()函數(shù)的使用

    在python的DataFrame中對(duì)數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì)主要使用groupby()函數(shù),本文主要介紹了python?DataFrame數(shù)據(jù)分組統(tǒng)計(jì)groupby()函數(shù)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-03-03

最新評(píng)論