OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
霍夫圆变换

目标

  • 我们将学习使用霍夫变换在图像中寻找圆。
  • 我们将学习这些函数:cv.HoughCircles()

理论

圆在数学上表示为 \((x-x_{center})^2 + (y - y_{center})^2 = r^2\),其中 \((x_{center},y_{center})\) 是圆心,\(r\) 是圆的半径。 从公式中我们可以看到我们有 3 个参数,所以我们需要一个 3D 累加器来进行霍夫变换,这将会非常低效。 因此,OpenCV 使用了一种更巧妙的方法,霍夫梯度法,它使用了边缘的梯度信息。

我们使用函数:cv.HoughCircles (图像, 圆, 方法, dp, minDist, param1 = 100, param2 = 100, minRadius = 0, maxRadius = 0)

参数
image8 位、单通道灰度输入图像。
circles找到的圆的输出向量(cv.CV_32FC3 类型)。 每个向量都被编码为一个 3 元素浮点向量 (x,y,radius)。
方法检测方法(参见 cv.HoughModes)。 目前,唯一实现的方法是 HOUGH_GRADIENT
dp累加器分辨率与图像分辨率的反比。 例如,如果 dp = 1 ,则累加器与输入图像具有相同的分辨率。 如果 dp = 2 ,则累加器的宽度和高度是输入图像的一半。
minDist检测到的圆的中心之间的最小距离。 如果该参数太小,除了真正的圆之外,还可能错误地检测到多个相邻的圆。 如果它太大,可能会错过一些圆。
param1第一个特定于方法的参数。 在 HOUGH_GRADIENT 的情况下,它是传递给 Canny 边缘检测器(较低的阈值是其两倍小)的两个阈值中的较高阈值。
param2第二个特定于方法的参数。 在 HOUGH_GRADIENT 的情况下,它是检测阶段圆心的累加器阈值。 它越小,可能会检测到更多的假圆。 对应于较大累加器值的圆将首先被返回。
minRadius最小圆半径。
maxRadius最大圆半径。

尝试一下