使用opencv HoughCircles

时间:2017-02-22 10:56:26

标签: opencv

我正在尝试使用Android中的检测两个同心圆。大外圈为红色,内圈小圈为蓝色。这个想法是在距离较长时检测大圆,并在距离变短时检测内圆。

Sample picture

我使用简单的代码:

Mat matRed = new Mat();
Core.inRange(matHsv, getScalar(hue - HUE_D, saturation - SAT_D, brightness - BRIGHT_D), getScalar(hue + HUE_D, saturation + SAT_D, brightness + BRIGHT_D), matRed);
//here we have black-white image
Imgproc.GaussianBlur(matRed, matRed, new Size(0, 0), 6, 6);
Mat matCircles = new Mat();
Imgproc.HoughCircles(matRed, matCircles, CV_HOUGH_GRADIENT, 1, matRed.rows()/8, 100, param2, 0, 0);

致电inRange后,我们在黑色背景上有白色戒指。 HoughCircles功能仅检测内黑圈。 我该如何让它来检测外部白圈呢?

1 个答案:

答案 0 :(得分:0)

没有看到样本图像(或者非常确定你的意思是'当距离很长时检测到大圆并且当距离变短时检测到内圈'),这有点猜测,但我建议使用Canny edge detect获取圈子的边界,然后使用contours提取边缘。如果需要提取其中一个,可以使用contour hierarchy来确定哪个在哪里。

此外,鉴于圆圈颜色不同,您可能希望使用inRange根据颜色进行分段;例如,this post from PyImageSearch包含一个Python应用程序,它执行基于颜色的跟踪。