![]() |
OpenCV 4.12.0
开源计算机视觉
|
圆在数学上表示为 \((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)
| image | 8 位、单通道灰度输入图像。 |
| 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 | 最大圆半径。 |