【问题标题】:detecting outer circle using opencv HoughCircles使用opencv HoughCircles检测外圆
【发布时间】:2017-07-12 08:53:54
【问题描述】:

我正在尝试在 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 函数仅检测内部黑色圆圈。 我怎样才能让它检测到外部的白色圆圈呢?

【问题讨论】:

  • 你有示例图片吗?
  • 在图像上使用 Canny,然后使用 HoughCircles

标签: opencv opencv


【解决方案1】:

在没有看到示例图像的情况下(或完全确定“在距离较长时检测大圆圈并在距离变短时检测内圈”的意思),这有点猜测,但我建议使用Canny edge detect 获取您的圆圈的边界,然后使用 contours 提取边缘。您可以使用contour hierarchy 来确定哪个在哪个里面,如果您需要提取其中一个。

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

【讨论】:

  • 据我所知,canny 边缘检测器使用灰色图像。当彩色图像转换为灰色时,我们丢失了信息。额外的颜色信息在复杂的条件下(下雨、下雪等)很有用
  • 我链接的教程包含代码示例;我认为您最好根据自己的目的调整这些内容,尤其是考虑到我不确切知道您要做什么。确实,转换为灰色会丢失信息,但是您可以保留彩色图像的副本并使用它进行一些额外的处理。您可能想查看使用 inRange 根据颜色进行分割;有关执行基于颜色的跟踪的示例 Python 应用程序,请参阅 here
  • @BeloweeP。我已经使用您的代码看到了您建议的编辑;我建议将其发布为您自己的答案,而不是将其附加到我的答案中。一方面,这意味着您获得了荣誉;另一方面,我认为这不是我建议的做法。 (如果它对你有用,那就太好了!但我觉得将它添加到我的答案中会产生误导。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
相关资源
最近更新 更多