如何通过点云拟合曲线?的OpenCV / C ++

时间:2015-09-15 20:43:18

标签: opencv cloud curve points

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

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

enter image description here

2 个答案:

答案 0 :(得分:2)

你有很多选择。

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(定向边界框)结构来保存属于某些线段的点,然后使用OBB的主轴作为线段。

答案 1 :(得分:1)

ilke444所说,我会使用形态学关闭操作,甚至扩张几次,然后使用'骨架'操作符。

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

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