python+opencv圓檢測

霍夫圓檢測對噪聲比較敏感,所有進行霍夫圓檢測的時候要先進行中值濾波。
在OpenCV中是通過圖像梯度來實現霍夫變換圓檢測的,因此要選用cv2.HOUGH_GRADIENT這個參數。
其實現分爲兩步:

  • 檢測圖像邊緣,發現可能的圓心
  • 從候選圓心中計算最佳半徑大小
import cv2
import numpy as np
smarties = cv2.imread(r"F:\Python\picture\smarties.png")
gray_img= cv2.cvtColor(smarties,cv2.COLOR_BGR2GRAY)
#進行中值濾波
img = cv2.medianBlur(gray_img,5)
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=35,minRadius=0,maxRadius=0)
#對數據進行四捨五入變爲整數
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    #畫出來圓的邊界
    cv2.circle(smarties,(i[0],i[1]),i[2],(0,0,0),2)
    #畫出來圓心
    cv2.circle(smarties,(i[0],i[1]),2,(0,255,255),3)
cv2.imshow("Circle",smarties)
cv2.waitKey()
cv2.destroyAllWindows()

實現效果:
在這裏插入圖片描述
在這裏插入圖片描述

cv2.HoughCircles(gray_img, method, dp, min_dist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
  • gray_img 輸入圖像(灰度圖)
  • method 這裏應選用cv2.HOUGH_GRADIENT
  • dp 累加器精度,一般默認爲1
  • min_dist 檢測到圓心的最短距離,這個值如果大了,就會多個圓被認爲是一個圓
  • circles 找到圓的輸出矢量,默認爲None即可
  • param1 Canny函數的高閾值
  • param2 圓心檢測閾值。根據你的圖像中的圓大小設置,當這張圖片中的圓越小,那麼此值就設置應該被設置越小。當設置的越小,那麼檢測出的圓越多,在檢測較大的圓時則會產生很多噪聲。所以要根據檢測圓的大小變化。
  • minRadius 能檢測到最小圓的半徑,默認爲0
  • maxRadius 能檢測到最大圓的半徑,默認爲0
  • 最小圓半徑和最大圓半徑可以輔助我們更好選則圓,如果沒有特殊需要就都默認爲0即可
發佈了59 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章