OpenCV 4.11.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 类型)。每个向量都被编码为一个三元素浮点向量 (x,y,radius)。 |
method | 检测方法(参见 cv.HoughModes)。目前,唯一实现的方法是 HOUGH_GRADIENT |
dp | 累加器分辨率与图像分辨率的反比。例如,如果 dp = 1,则累加器具有与输入图像相同的分辨率。如果 dp = 2,则累加器的宽度和高度都减半。 |
minDist | 检测到的圆的中心之间的最小距离。如果该参数太小,除了真实的圆之外,还可能错误地检测到多个相邻的圆。如果它太大,则可能会错过一些圆。 |
param1 | 第一个特定于方法的参数。对于 HOUGH_GRADIENT,它是传递给 Canny 边缘检测器的两个阈值中的较高阈值(较低的阈值是较高的阈值的一半)。 |
param2 | 第二个特定于方法的参数。对于 HOUGH_GRADIENT,它是检测阶段圆中心的累加器阈值。它越小,检测到的虚假圆就越多。对应于较大累加器值的圆将首先返回。 |
minRadius | 最小圆半径。 |
maxRadius | 最大圆半径。 |