【问题标题】:Determine Orientation of a Sketched Arrow with OpenCV使用 OpenCV 确定草图箭头的方向
【发布时间】:2018-04-28 15:34:21
【问题描述】:

我有一堆箭头草图,我想确定它们的方向、起点坐标和终点坐标。

我正在使用goodFeaturesToTrack,但我真的不知道下一步该做什么。

这就是我所拥有的

箭头的形状没有限制,可以随心所欲,也可以由直线和直角组成。

我真的很感激任何想法,因为我真的迷路了。该项目是将有限状态机的草图转换为 VHDL 代码,我已经覆盖了圆圈和字符,所以这是最后一个组件,但我不知道如何解决这个问题。

【问题讨论】:

  • 我会试试 Canny 边缘检测器。但是你的问题对于我来说太宽泛了。
  • 您能否再解释一下,我不确定Canny 有什么帮助,这是goodFeaturesToTrack 的前一步。是的,我同意它很广泛,但这是因为我已经用尽了我所有的想法,我有点绝望地希望已经解决了这个问题的人会看到这个问题。此外,我不需要一个完整的解决方案,只需要一个我可以尝试的新建议。
  • 我想寻找箭头提示——至于如何,我目前并没有太多线索(我也有点醉了 :D)箭头提示看起来像一个适合附近点的 3 条线几乎相交的地方。我知道这很模糊,但它可能是有用的观察。
  • 您是否找到了获得所需结果的最佳方法,我使用了霍夫线,但我只得到一条线,甚至没有一条线段,如果我找到一条线段,那么我至少找到起点和终点,然后我可以定义指针(箭头)的位置。如果您知道如何解决此问题,请上传您的解决方案。

标签: c++ opencv opencv3.0


【解决方案1】:

您可以使用HoughLines 而不是使用goodFeaturesToTrack,它会为您提供图像中的所有线条,因此我建议您先进行一些分割以分别获取每个箭头。 HoughLines 为您提供极坐标中的所有线条,这非常适合您的情况,因为您可以知道线条的方向。你可以在这里阅读更多:https://docs.opencv.org/3.4.0/d9/db0/tutorial_hough_lines.html

对于直线,您的任务很简单,您需要找到相交于一点的 3 条线段 (http://answers.opencv.org/question/92164/how-to-find-coordinates-of-intersection-of-lines-after-using-houghlines/)。这将是您的箭头的终点,您可以使用中线方程找到起点。

对于曲线,这有点棘手,因为您可能会得到几条曲线段的霍夫线,或者根本没有。所以在这种情况下,我建议你将两条线的交点作为你的终点,然后使用goodFeaturesToTrack 然后从离你的终点最近的点开始移动到下一个更近的点,直到你到达终点并选择它作为起点。

我不知道这是否是最好的解决方案,我自己也没有尝试过,但我希望它可以帮助你或给你一些方向。

【讨论】:

  • 非常感谢,虽然还不完美,但确实提高了准确性。有时甚至没有检测到箭头处的线条,尽管可能更多地使用参数可能会起作用。
  • 不客气,我很高兴能帮上忙。我建议您在尝试检测箭头之前进行一些分割。希望对您有所帮助。
猜你喜欢
  • 2014-05-17
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 2017-07-17
  • 1970-01-01
  • 2011-12-26
相关资源
最近更新 更多