我有一个带圆圈的图像。有时候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
答案 0 :(得分:0)
以下是有关参数的更多信息:
inImage
- 显而易见inDp
- 分辨率乘数。如果您希望算法像素完美,请将其保留在' 1',但如果图像太大,您可以将其设置为' 2'使分辨率降低两倍inMinDist
- 圆圈之间的最小距离(以像素为单位)。如果您尝试在100x100像素的边界框大小周围找到圆圈,则将此值调整为20像素是合理的。inParam1
- 精确过滤阈值。 强烈建议您对cvCanny
- ed图片进行一些检查,了解如何正确设置此阈值。我记得把它设置为200,以获得漂亮而明亮的照片。inParam2
- 应检测多少像素才能检测到圆圈?inMinRadius
/ inMaxRadius
- 很明显帮助inParam2
查看此图片,解释Hough Circles内部工作。
当您cvCanny
成像时,您将获得所有白色和黑色像素。让我们说左边的这个白色轮廓是你的cvCanny
化圈。每个白色像素都是"投射"不同大小的圆圈。从红色圆圈(minRadius)开始,变得更大。绿圈半径是如此之大,所有点都在中间相遇。粉红点是' n'绿色圆圈相交。如果' n'如果大于inParam2
,则会在那里找到圆圈。