【翻譯:OpenCV-Python教程】霍夫圓變換

⚠️由於自己的拖延症,3.4.3翻到一半,OpenCV發佈了4.0.0了正式版,所以接下來是按照4.0.0翻譯的。

⚠️除了版本之外,其他還是照舊,Hough Circle Transform,原文

目標

在這一章,

  • 我們會學到用霍夫變換來在圖像中找出一個圓。
  • 我們會用到這些函數:cv.HoughCircles()

原理

圓在算術上被表示成 (x-x_{center})^2 + (y - y_{center})^2 = r^2 其中(x_{center},y_{center})是指的圓心座標,r是圓的半徑。從這個公式來看,得知我們有三個參數,這樣我們就需要一個三維度的累加器來做霍夫變換了,這樣效率是非常低的。所以 OpenCV 用了更巧妙的方法,霍夫梯度法,它利用了邊緣的梯度信息。

在此我們使用的函數是 cv.HoughCircles()。它的參數非常的多,這些參數在文檔中都有詳細的解釋。所以我們直接上代碼吧。

import numpy as np
import cv2 as cv
img = cv.imread('opencv-logo-white.png',0)
img = cv.medianBlur(img,5)
cimg = cv.cvtColor(img,cv.COLOR_GRAY2BGR)
circles = cv.HoughCircles(img,cv.HOUGH_GRADIENT,1,20,
                            param1=50,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
    # draw the outer circle
    cv.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
    # draw the center of the circle
    cv.circle(cimg,(i[0],i[1]),2,(0,0,255),3)
cv.imshow('detected circles',cimg)
cv.waitKey(0)
cv.destroyAllWindows()

結果顯示如下:

houghcircles2.jpg

額外資源

練習


上篇:【翻譯:OpenCV-Python教程】霍夫線性變換

下篇:【翻譯:OpenCV-Python教程】用分水嶺算法分割圖像

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章