【问题标题】:Finding individual center points of circles in an image在图像中查找圆的各个中心点
【发布时间】:2024-01-30 23:45:01
【问题描述】:

我正在使用开放式 CV 和 C++。我有一个完全黑暗的图像,上面有 3 个彩色点。我需要他们的中心坐标。如果我在暗图像中只有一个彩色点,它将自动显示其中心坐标。但是,如果我将带有 3 个彩色点的暗图像作为输入,我的程序将对这 3 个坐标进行平均,并将 3 个彩色点的中心一起返回,这正是我的问题。我需要他们各自的中心坐标。

任何人都可以建议一种方法来做到这一点。谢谢

这里是代码http://pastebin.com/RM7chqBE

【问题讨论】:

  • 也许如果您分享代码或至少与算法相关的重要部分,我们将能够提供帮助。
  • 是的,我将代码粘贴到粘贴箱并编辑了上面的内容。
  • 我看到至少三种简单的方法可以做到这一点(但可能有更简单的方法): 1. 使用cv::findContours 方法并计算每个找到的轮廓的重心(如果每个轮廓在图像就是这样一个点) 2. 使用cv::HoughCircles 方法找到每个圆(如果图像中可以有其他点) 3. 使用聚类方法(例如k-means)并计算每个圆的重心集群(如果点/集群的数量已知)(4.)使用某种斑点检测 - 类似于圆形检测,但也可能适用于较小的圆圈。
  • 正如@Micka 所建议的,我已经使用QuickBlobit works nicely 测试了blob 检测方法(方法4)。有关详细信息,请参阅this answer
  • 非常感谢所有好主意!@deltheil:你的代码是用 C++ 编写的吗?我一直在尝试使用 blob 检测来检测这些点,但不幸的是我没有得到正确的参数。可以发一下代码吗?

标签: c++ opencv computer-vision coordinates


【解决方案1】:

找到了解决办法!

  1. 将原始图像加载为灰度
  2. 将原始图像转换为灰色
  3. 根据需要检测的颜色设置强度值范围
  4. 轮廓和层次的向量
  5. 查找轮廓
  6. 矩和点向量
  7. 遍历每个轮廓以找到坐标

【讨论】:

    【解决方案2】:

    轻松实现此目的的方法之一是使用 findContours 和 drawContours 函数。 在文档中,您有一些代码解释了如何检索图像的连接组件。这才是你真正想要做的。

    例如,您可以在其自己的图像上绘制您将找到的每个连接组件(即每个点),并使用您在每个图像上已有的代码。 然而,这可能不是最有效的方法,但它真的很简单。

    我会这样做 http://pastebin.com/y1Ae3e2V

    我不确定这是否有效,因为我没有时间测试它,但你可以试试。

    【讨论】:

    • 我又试了一次,但还是不行。它运行并退出没有任何错误,并且不返回中心坐标。这是代码pastebin.com/jb7YDvai
    最近更新 更多