【发布时间】:2021-11-09 16:46:55
【问题描述】:
有没有办法将点集(显然看起来像有间隙的曲线)转换或合并为连续平滑曲线,以便它们可以由路径或连续轮廓定义(然后在 SVG 文件中保存为矢量路径) ? Python中是否有任何处理此类事情的库?
这是 cv2.findContour(...) 的结果:
它返回了大约 800 个轮廓,而似乎所有这些都可以合并成一个平滑的 25-30 个轮廓。
小细节很重要,因此我不能在图像上的 cv2.findContour() 之前使用带阈值的简单模糊来从一开始就获得平滑的轮廓。
我尝试使用 scypi.interpolate.* lib 从一组点构建平滑曲线,但问题是我无法确定在插值之前要合并的轮廓子集。
【问题讨论】:
-
这看起来像一个经典的“在你完成清理输入图像之前的findContours”,所以:“cv2.findContour(...) 的结果”在什么输入上,输入只是“一个图片”或者你记得先
cv2.threshold吗?此外,您是否查看过有关将曲线拟合到 numpy 轮廓的其他 SO 问题,例如 stackoverflow.com/questions/47936474 并在网上搜索有关曲线拟合的教程,特别是在使用 numpy 轮廓时? (如果有,请注明all your research so far in your post, too) -
这不是“盐和胡椒去除”的问题。当然,我在轮廓检测之前执行“cv2.threshold()”以去除噪声(上面描述的结果是在所有这些准备工作之后出现的)。问题是合并折线(轮廓),以便它们给出更大的轮廓。此处讨论了关闭主题stackoverflow.com/questions/43293915/…,但它是关于使用 ImageMagick 的,这对我来说不是一个选项。
-
请记住在您的帖子中也提到这一点,因为发表评论的人和写答案的人通常不是同一个人。确保人们不需要阅读 cmets 来获取所有详细信息。
-
另外,我仍然建议在此处显示更多代码以及您的图像输入。显示您开始使用的图像,以及您编写的minimal reproducible example 代码以从该图像获取轮廓图像,以便人们可以评论更多。如果您对代码有任何疑问,请始终try to show the relevant code。代码越短越好,只要它的 MCVE 足以让人们去“嗯,让我们看看
是的,它重现了帖子的声明,让我编辑这段代码,直到它完成他们的工作需要”。
标签: python opencv curve-fitting contour bezier