【问题标题】:How to fit curve through cloud of points? OpenCV/C++如何通过点云拟合曲线? OpenCV/C++
【发布时间】:2015-09-15 20:43:18
【问题描述】:

简单的问题。如何像人类一样通过所有这些点绘制曲线?

我的示例输入图像在这里:

【问题讨论】:

  • 您的问题太宽泛,无法在此回答。或者,您可以 just use your hand.
  • 对我来说似乎是合法的

标签: opencv cloud curve points


【解决方案1】:

你有很多选择。

1) 如果点在示例中大部分位于一条线上,最简单的方法是使用形态变换 (http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html)。例如,如果您使用关闭(即扩张和侵蚀),您将首先通过扩张使点变大(使它们相互接触),然后您将侵蚀(使它们回到原来的状态)尺寸,同时仍然相互接触)。可以模仿台词。

2) 您可以使用 OpenCV 的 fitLine 函数,将线拟合到 2D 或 3D 集合。 (http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html)

3) 您可以逐点加入。但是,为此,您需要猜测线段的方向,并相应地对点进行排序。您可以使用 OBB(orientated bounding box)结构来保存属于某些线段的点,然后使用 OBB 的主轴作为线段。

【讨论】:

  • 是的。图像上有线条,但拍得不好。我所有的图像看起来都像这样。谢谢!我不知道函数 fitLine 存在。
【解决方案2】:

正如ilke444所说,我会使用形态闭合操作,甚至膨胀几次然后使用'骨架'操作。

在你有一条漂亮的细线之后,我想你想要一个连续的轮廓,不一定是直线。所以你可能想使用ApproxPolyDPhttp://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#approxpolydp

它返回描述轮廓的点列表,您可以设置其精度。

【讨论】:

  • 我完全按照您的描述进行了尝试,但是找到骨架需要花费很多毫秒。谢谢你们的快速回答。我现在知道该怎么做了!
猜你喜欢
  • 1970-01-01
  • 2016-05-18
  • 2021-11-19
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2014-05-18
  • 2021-03-02
  • 1970-01-01
相关资源
最近更新 更多