【问题标题】:Interpolating colors inside a contour in opencv [python]在opencv [python]中的轮廓内插值颜色
【发布时间】:2020-10-22 14:38:01
【问题描述】:

我正在处理一些包含表格并且上面有 1 或 2 个贴纸的图像。我想做的是摆脱那些贴纸。使用颜色阈值(在 HSV 中)和轮廓检测,我可以为这些贴纸创建一个蒙版。现在我希望那些贴纸从那里“溶解”出来(我不知道这个的正确术语)。在保持这些表格线完整的同时,使我的线检测工作良好(清洁后我必须这样做)。
我试过 OpenCV 的inpaint。但这在这里效果不佳,因为贴纸尺寸足够大。

看这个例子:

  1. 整个图像中贴有贴纸的部分(内部内容由我审查)。它可以在水平线或垂直线上,或两者兼而有之。基本上,它粘在桌子上的某个地方(也许也有一些文字,但无论如何都无法恢复)。背景不需要发白,可以是粉红色/橙色/其他颜色。
  2. 这是经过阈值处理的图像,用于创建贴纸的蒙版。如果需要,我们也可以得到它的轮廓。
  3. 这是cv.inpaint() 半径为 3 的结果。 我想要的是重建这些线条。

我的解决方案

现在我的方法是在贴纸轮廓之间插入颜色,以填充它。对于轮廓内的每个像素,我将进行垂直插值和水平插值(边界颜色的插值),然后用两者的平均值填充该像素。我希望这至少能保留我的垂直和水平线。 (如果它在桌子的一角,可能会失败)。这也将保持背景平滑,我的背景可以有一些不同的颜色。

现在我的问题是如何实现这一点。我所拥有的是使用 OpenCV 的get_contours() 找到的轮廓。我不知道如何获取其边界上的颜色以及如何插入中间颜色。

感谢任何帮助。提前致谢。

出于保密原因,我无法分享整张图片。

编辑

我尝试了缝雕法(implementation)。结果如下:

  1. 竖缝
  2. 横缝

一旦我知道要使用哪一个,它就会很好地工作。而且我不确定当我们有水平线和垂直线时它会做得如何。

附言。不要建议需要找到线路然后工作的解决方案。因为我的整个图像中会有很多线条。

【问题讨论】:

标签: python opencv image-processing computer-vision


【解决方案1】:

您可以制作合成示例图像。为了更好地解释你的问题。 据我所知,您可以使用Poisson image editing。只需取一张清晰的纸质图像,然后使用泊松混合和您提取的蒙版将其粘贴。

查看this github repo as instance 获取代码示例。

【讨论】:

  • 你好安德烈。我添加了一些图像以使其更清晰。希望这会有所帮助。
猜你喜欢
  • 2016-10-29
  • 2020-09-22
  • 2021-01-03
  • 2016-09-25
  • 2019-01-07
  • 2013-04-23
  • 1970-01-01
  • 2016-04-30
  • 2019-01-25
相关资源
最近更新 更多