使用 cv2.HoughCircles 检测圆圈
Posted
技术标签:
【中文标题】使用 cv2.HoughCircles 检测圆圈【英文标题】:detect circles using cv2.HoughCircles 【发布时间】:2018-03-23 14:21:53 【问题描述】:我有一张带圆圈的图片。有时 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 参数的方式,但我不明白如何定义这些参数。
我已经在这里查看了文档:https://docs.opencv.org/3.1.0/da/d53/tutorial_py_houghcircles.html
这里:https://docs.opencv.org/3.1.0/dd/d1a/group__imgproc__feature.html#ga47849c3be0d0406ad3ca45db65a25d2d
但我仍然不清楚。
HoughCircles 无法识别的第一张图片: http://www.image-share.com/ipng-3711-263.html
它只识别一个圆圈的第二张图片: http://www.image-share.com/ipng-3711-264.html
它完美识别的第三张图像: http://www.image-share.com/ipng-3711-265.html
【问题讨论】:
请贴出原图和过滤结果 @Micka,我重写了我的问题:) 【参考方案1】:这里有更多关于参数的信息:
cvHoughCircles
inImage
- 很明显
inDp
- 分辨率乘数。如果您希望算法像素完美,请将其保留为“1”,但如果图像太大,您可以将其设置为“2”以使分辨率降低两倍
inMinDist
- 圆圈之间的最小距离(以像素为单位)。如果您要查找大小为 100x100 像素的边界框大小的圆圈,则将此值调整为 20 像素是合理的。
inParam1
- 精明过滤器阈值。 强烈建议对cvCanny
-ed 图像进行一些检查,以了解如何正确设置此阈值。我记得将它设置为 200 可以拍出漂亮明亮的照片。
inParam2
- 应该检测多少像素才能检测到圆?
inMinRadius
/inMaxRadius
- 很明显
要帮助inParam2
,请查看这张解释 Hough Circles 内部工作的图片。
当您cvCanny
您的图像时,您会得到所有这些白色和黑色像素。假设左边的这个白色轮廓是你的cvCanny
-ized 圆圈。每个白色像素都在“投影”不同大小的圆圈。从红色圆圈 (minRadius) 开始,然后变大。绿色圆圈半径很大,所有点都在中间相遇。粉红色的点是“n”个绿色圆圈相交的地方。如果 'n' 大于 inParam2
,则在此处找到圆圈。
【讨论】:
感谢标题!你的回答让事情更清楚了。我也要去看看cvCanny!以上是关于使用 cv2.HoughCircles 检测圆圈的主要内容,如果未能解决你的问题,请参考以下文章
Python,OpenCV中的霍夫圆变换——cv2.HoughCircles()