OpenCV 4.10.0
开源计算机视觉
|
圆在数学上表示为 \((x-x_{center})^2 + (y - y_{center})^2 = r^2\),其中 \((x_{center},y_{center})\) 为圆心,\(r\) 为圆的半径。从该方程中,我们可以看到我们有 3 个参数,因此我们需要 3D 累加器进行霍夫变换,这将非常低效。因此,OpenCV 使用了一种更巧妙的方法,即霍夫梯度法,它使用边缘的梯度信息。
我们使用以下函数: cv.HoughCircles (image, circles, method, dp, minDist, param1 = 100, param2 = 100, minRadius = 0, maxRadius = 0)
image | 8 位、单通道、灰度输入图像。 |
circles | 发现的圆形输出向量(cv.CV_32FC3 类型)。每个向量编码为 3 元素浮点向量 (x,y,radius)。 |
method | 检测方法(请参见 cv.HoughModes)。目前,唯一实施的方法是 HOUGH_GRADIENT |
dp | 累加器分辨率对图像分辨率的倒数比。例如,如果 dp = 1,则累加器具有与输入图像相同的分辨率。如果 dp = 2,则累加器具有减半的宽度和高度。 |
minDist | 检测到的圆形中心的最小距离。如果该参数过小,则除了真实的圆形外,还可能错误地检测到多个相邻圆形。如果太大,则可能错过一些圆形。 |
param1 | 第一个特定于方法的参数。对于 HOUGH_GRADIENT,它是传递给 Canny 边缘检测器的两个参数中的较高阈值(较低阈值小两倍)。 |
param2 | 第二个特定于方法的参数。对于 HOUGH_GRADIENT,它是检测阶段圆形中心点的累加器阈值。该阈值越小,可能检测到的错误圆形就越多。首先会返回与较大累加器值相对应的圆形。 |
minRadius | 最小圆形半径。 |
maxRadius | 最大圆形半径。 |