霍夫變換圓形檢測(基於OpenCV Python)

2021-08-07 11:33:23 字數 1743 閱讀 1573

基於python使用opencv實現在一張中檢測出圓形,並且根據座標和半徑標記出圓。不涉及理論,只講應用。

函式說明:

python: cv2.houghcircles(image, method, dp, mindist[, circles[, param1[, param2[, minradius[, maxradius]]]]]) → circles

引數說明:

這是根據opencv官方文件谷歌翻譯過來的,引數比較多,但用的時候只修改一些主要的,傳入的影象和最大最小圓半徑,以達到檢測出想要的圓的效果。

還有要注意函式的返回值

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

這句話不是很好理解,我們直接輸出返回值就會發現是個 三層巢狀list,最內層list有三個元素,分別是圓心的行,列,半徑,這表示乙個圓的基本資訊。多個圓基本資訊組成了乙個新的list,這個list包含了檢測到的所有圓,即長度就是檢測到圓的個數。最外層再加了個list,至於幹啥的不清楚了,不影響使用就好。

下圖是輸出函式返回值的乙個例項圖

完整**

import  cv2

#載入並顯示

img=cv2.imread('circle.png')

cv2.imshow('img',img)

#灰度化

gray=cv2.cvtcolor(img,cv2.color_bgr2gray)

#輸出影象大小,方便根據影象大小調節minradius和maxradius

print(img.shape)

#霍夫變換圓檢測

circles= cv2.houghcircles(gray,cv2.hough_gradient,1,100,param1=100,param2=30,minradius=5,maxradius=300)

#輸出返回值,方便檢視型別

print(circles)

#輸出檢測到圓的個數

print(len(circles[0]))

print('-------------我是條分割線-----------------')

#根據檢測到圓的資訊,畫出每乙個圓

for circle in circles[0]:

#圓的基本資訊

print(circle[2])

#座標行列

x=int(circle[0])

y=int(circle[1])

#半徑r=int(circle[2])

#在原圖用指定顏色標記出圓的位置

img=cv2.circle(img,(x,y),r,(0,0,255),-1)

#顯示新影象

cv2.imshow('res',img)

#按任意鍵退出

cv2.waitkey(0)

cv2.destroyallwindows()

執行結果

shell輸出截圖

霍夫變換檢測圓形

opencv入門教程之十四 opencv霍夫變換 霍夫線變換,霍夫圓變換合輯 houghcircles函式可以利用霍夫變換演算法檢測出灰度圖中的圓。它和之前的houghlines和houghlinesp比較明顯的乙個區別是它不需要源圖是二值的,而houghlines和houghlinesp都需要源圖...

Hough Transform 霍夫變換檢測直線

hough transform 霍夫變換檢測直線 從理論到 再從 到理論 1 理論之通俗理解 1.在影象中檢測直線的問題,其實質是找到構成直線的所有的畫素點。那麼問題就是從找到直線,變成找到符合y mx c的所有 x,y 的點的問題。2.進行座標系變化y mx c,變成c xm b。直線上的點 x1...

霍夫變換檢測直線

對於結構化道路的檢測,常用的方法是採用霍夫變換檢測道路中的直線段。一條直線可以看做是影象上的若干個畫素點組成,也可以用一條直線方程來表示,如 y kx b,那麼霍夫變換檢測直線段其實是將影象畫素點空間變換到引數空間,對於直線來說就是引數 k,b 也可以用來檢測其他形狀如圓和橢圓,只是引數空間表示不一...