在OpenCV中检测球/圆(C ++)

时间:2014-08-23 13:40:02

标签: c++ c image opencv detection

我正在尝试在过滤后的图像中检测球。 在此图片中,我已经删除了无法成为对象一部分的内容。 当然我尝试了 HoughCircle 函数,但是没有得到预期的输出。 要么它没有找到球,要么检测到太多的圆圈。 问题是球不完全圆

截图:

enter image description here

我认为它可以工作,如果我识别单个物体,计算它们的中心并检查半径是否在不同方向上大致相同。 但是,如果球也没有完全可见,那么它也会很好。 通过这种方法,我无法检测到半圆形或类似的东西。

编辑:这些图片来自视频流(实时)。

我可以尝试其他哪种方法?

enter image description here

1 个答案:

答案 0 :(得分:5)

看起来你已经使用差异成像或类似的东西来获得你拥有的图像..?而不是寻找圈子,寻找更通用的循环。建议:

  • 分离所有连接的组件。
  • 对于每个连接的组件 -
  • 在轮廓中走动并收集列表中的所有轮廓像素
  • 建议1:使用最小二乘法将椭圆拟合到轮廓点
  • 建议2:研究每个轮廓像素的曲率,并检查它是否适合圆形或椭圆形。可以通过计算轮廓像素的边缘方向的直方图,或者通过检查从轮廓像素到轮廓像素的方向的梯度来完成该检查。在第二种情况下,对于圆形或椭圆形,渐变应该几乎是均匀的(问我这是不是很清楚)。
  • 对椭圆或环的周长,面积,长轴和短轴的长度等应用约束。将这些属性收集为功能。
  • 您可以使用硬编码启发式/阈值将一组要素分类为球/非球,或使用机器学习算法。我首先要保持简单,只需使用在研究一些图像后获得的阈值。

希望这有帮助。