如何使用c ++将点拟合到曲线?

时间:2016-01-15 07:12:02

标签: c++ opencv

图片上有一个椭圆,如下所示。

enter image description here

我通过使用opencv获得了轮廓点。但你可以看到pictrue,因为分辨率很低,轮廓上有一条直线。如何将它拟合成曲线,就像蓝线一样?

enter image description here

1 个答案:

答案 0 :(得分:3)

解决问题的方法之一是对形状进行矢量化(从简单的强度空间移动到向量空间)。

我不了解这个领域的最新技术。但是,根据学校信息,我可以建议这个解决方案。

Bezier curves,你可以尝试使用简单的贝塞尔曲线来塑造你的形状。这不是一个难以操作的谷歌,你可以谷歌打几十个。然后,您可以根据需要调整大小,然后可以将其渲染为简单图像。 请注意,您也可以Splines代替Bezier。

另一种方法更简单但效率更低。由于您提到了OpenCV,您可以在点上应用cv::fitEllipse。请注意,这将返回包含椭圆的RotatedRect。你可以像这样推断你的椭圆:

Center = Center of RotatedRect.
Longest Radius = The Line which pass from the center and intersect with the two small sides of the RotatedRect.
Smallest Radius = The Line which pass from the center and intersect with the two long sides of the RotatedRect.

获得椭圆参数后,您可以根据需要调整其大小,然后使用cv::ellipse以您想要的大小重新绘制它。

我知道这是一个伪答案。但是,我认为每件事都很容易申请。如果你在实施它时遇到任何问题,请给我一个评论。