使用cv2.HoughCircles检测圆圈

时间:2018-03-23 14:21:54

标签: python opencv

我有一个带圆圈的图像。有时候HoughCircles会检测到这些圈子并给我我期望的东西。其他时候它没有检测到,即使图像有圆圈(所以它返回我'无')。

我正在使用的detectCircles(path)函数:

img = cv2.imread(path,0)
img = cv2.medianBlur(img,5) 
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
                        param1=50,param2=30,minRadius=0,maxRadius=0)

我认为这可能是我使用HoughCircle参数的方式,但我不明白如何定义这些参数。

我已在此处查看文档:{​​{3}}

在这里:https://docs.opencv.org/3.1.0/da/d53/tutorial_py_houghcircles.html

但我仍不清楚。

第一张图片HoughCircles无法识别: https://docs.opencv.org/3.1.0/dd/d1a/group__imgproc__feature.html#ga47849c3be0d0406ad3ca45db65a25d2d

仅识别一个圆圈的第二张图片: http://www.image-share.com/ipng-3711-263.html

它完美识别的第三张图片: http://www.image-share.com/ipng-3711-264.html

1 个答案:

答案 0 :(得分:0)

以下是有关参数的更多信息:

cvHoughCircles

  • inImage - 显而易见
  • inDp - 分辨率乘数。如果您希望算法像素完美,请将其保留在' 1',但如果图像太大,您可以将其设置为' 2'使分辨率降低两倍
  • inMinDist - 圆圈之间的最小距离(以像素为单位)。如果您尝试在100x100像素的边界框大小周围找到圆圈,则将此值调整为20像素是合理的。
  • inParam1 - 精确过滤阈值。 强烈建议您对cvCanny - ed图片进行一些检查,了解如何正确设置此阈值。我记得把它设置为200,以获得漂亮而明亮的照片。
  • inParam2 - 应检测多少像素才能检测到圆圈?
  • inMinRadius / inMaxRadius - 很明显

帮助inParam2查看此图片,解释Hough Circles内部工作。

Hough Circles

当您cvCanny成像时,您将获得所有白色和黑色像素。让我们说左边的这个白色轮廓是你的cvCanny化圈。每个白色像素都是"投射"不同大小的圆圈。从红色圆圈(minRadius)开始,变得更大。绿圈半径是如此之大,所有点都在中间相遇。粉红点是' n'绿色圆圈相交。如果' n'如果大于inParam2,则会在那里找到圆圈。