【问题标题】:How to remove vertical lines from img如何从img中删除垂直线
【发布时间】:2018-05-29 10:45:47
【问题描述】:

我在下面的图片中查找数字时遇到了问题。它是由垂直线引起的,有时会出现,有时不会。我正在寻找如何从图片中删除这些垂直线的想法。

我尝试过轮廓检测,但是当它发生关闭时它选择了行和最接近的数字。我也尝试过形态变换,但它从数字中删除了很多像素。

为了删除短线,我尝试查看图像的上半部分并从中检测出现间隙的位置。找到间隙后,我将其垂直拉伸,但又会去除很多。霍夫变换也没有帮助。

图片:

【问题讨论】:

  • 提示一下:如果你尝试去掉竖线,你怎么能保证不会误删1呢?
  • 这就是重点,我只想删除数字之间的垂直线。 1 中的垂直线必须保持不变

标签: image opencv lines feature-detection


【解决方案1】:

如果你可以按数字的宽度来划分图片,你可以使用erosion然后dylatation,因为这绝对是最简单的方法。它应该在图片上正常工作:1、2、3、8。您可以尝试以多种比例使用这两种操作,例如 2 次侵蚀、2 次扩张; 2侵蚀,1扩张等。

通常用于消除线条的过滤器是逻辑过滤器(垂直定位)​​和中间过滤器。您还可以通过先前的 dylatation 支持中值过滤器,因为通常您要擦除的线条比您的数字更细。执行中位数后,您可以再次使用腐蚀。

另一种可能性是使用垂直索贝尔过滤器(将效果放入缓冲区),然后侵蚀/逻辑/中间原始图片,最后合并两者。 Sobel 将强调水平边缘,因此在合并后它将撤消侵蚀效果,但仅限于数字。它可能会在线路顶端周围的地方留下微小的斑点,但它很容易被任何低通滤波器擦除。

附言。每当腐蚀、卷积或过滤时,只在垂直对齐的像素中进行,以最大程度地利用细线。

【讨论】:

    【解决方案2】:

    您可以尝试使用OpenCVcvMatchTemplate()中的函数,因为数字是一致的。其他方法是使用 Support Vector Machines 的库

    这也可以在SimpleCV中完成

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 2021-08-08
      • 2017-07-13
      • 2019-03-23
      • 2021-10-25
      • 2017-09-03
      相关资源
      最近更新 更多