基於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 也可以用來檢測其他形狀如圓和橢圓,只是引數空間表示不一...