【问题标题】:Merge a set of points/small contours into a bigger continuous contour将一组点/小轮廓合并成一个更大的连续轮廓
【发布时间】: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


【解决方案1】:

我认为形态学操作是这里的答案。 试试这个:

import cv2

image = cv2.imread("path/to/image")
cv2.imshow("image", image)
cv2.waitKey(0)


kernel = np.ones((3, 3),np.uint8)
dilated_image = cv2.dilate(image, kernel, iterations = 1)
cv2.imshow("dilated_image", dilated_image)
cv2.waitKey(0)
eroded_image = cv2.erode(dilated_image, kernel, iterations = 1)
cv2.imshow("eroded_image", eroded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

你会得到这个:

在膨胀之后执行腐蚀称为闭合。它也可以执行为

closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)

您可以操纵内核大小、迭代次数和内核模式来获得所需的结果。

【讨论】:

  • 感谢您的回答,但不幸的是,他们没有。在 dilate() 之后,图像会丢失所有重要的小细节(具有 3-4 个点的独立轮廓)。我需要尽可能多地保留原始图像,尤其是线条的粗细。
  • 将迭代次数减少到1并选择大小为3x3的内核。
猜你喜欢
  • 2018-06-16
  • 2019-12-24
  • 2014-05-13
  • 1970-01-01
  • 2013-01-01
  • 2016-09-11
  • 2022-01-10
  • 2014-01-22
  • 2018-03-18
相关资源
最近更新 更多