【翻译: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()

结果显示如下:

【翻译:OpenCV-Python教程】霍夫圆变换_第1张图片

额外资源

练习


上篇:【翻译:OpenCV-Python教程】霍夫线性变换

下篇:【翻译:OpenCV-Python教程】用分水岭算法分割图像

你可能感兴趣的:(OpenCV,翻译,OpenCV,中文文档,计算机视觉,人工智能)