Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过点云拟合曲线?OpenCV/C++;_Opencv_Cloud_Curve_Points - Fatal编程技术网

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

如何通过点云拟合曲线?OpenCV/C++;,opencv,cloud,curve,points,Opencv,Cloud,Curve,Points,简单的问题。如何像人类那样画出穿过所有这些点的曲线 我的示例输入图像如下: 你有很多选择 1) 如果点大部分如示例中所示在一条线上,最简单的方法是使用形态学变换()。例如,如果使用“闭合”(即“扩张和侵蚀”),则首先通过扩张使点变大(以便它们彼此接触),然后进行侵蚀(以便它们在彼此接触的情况下恢复到原始大小)。可以模仿线条的 2) 您可以使用OpenCV的fitLine功能,该功能将直线拟合到二维或三维集合。() 3) 你可以一点一点地连接。但是,为此,您需要猜测线段的方向,并相应地对点进行排序

简单的问题。如何像人类那样画出穿过所有这些点的曲线

我的示例输入图像如下:

你有很多选择

1) 如果点大部分如示例中所示在一条线上,最简单的方法是使用形态学变换()。例如,如果使用“闭合”(即“扩张和侵蚀”),则首先通过扩张使点变大(以便它们彼此接触),然后进行侵蚀(以便它们在彼此接触的情况下恢复到原始大小)。可以模仿线条的

2) 您可以使用OpenCV的fitLine功能,该功能将直线拟合到二维或三维集合。()


3) 你可以一点一点地连接。但是,为此,您需要猜测线段的方向,并相应地对点进行排序。您可以使用OBB(定向边界框)结构来保持属于某些线段的点,然后使用OBB的主导轴作为线段。

正如ilke444所说,我将使用形态学闭合操作,甚至放大几次,然后使用“骨架”操作符

在你有了一条漂亮的细线之后,我想你需要的是一条连续的轮廓线,而不一定是直线。所以你可能需要使用
ApproxPolyDP


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

您的问题太广泛,无法在这里回答。或者,你可以。对我来说似乎是合法的。是的。这是图像上的线条,但捕捉不好。我所有的图片都会像这样。非常感谢。我不知道fitLine函数的存在。我尝试了你们所描述的,但找到骷髅花了很多时间。谢谢你们快速的回答。我现在知道该怎么办了!