【问题标题】:removing horizontal lines from scanned image从扫描图像中去除水平线
【发布时间】:2018-04-02 08:08:53
【问题描述】:

在 Imagemagick 中很好地尝试了形态学,但不幸的是,输出也会影响文本,因此无法满足 ocr 的要求。那么有没有更快的方法来从图像中删除线条而不影响ocr的文本?

输入图片:

Imagemagick 代码:

magick 1sa.jpg -morphology close:1 "1x4: 0,1,1,0" result.png            

输出图像

编辑:感谢所有回复的人。我终于通过以下代码使其工作:

magick E:\1sa.jpg ( +clone -threshold 50% -negate -statistic median 219x1 ) -compose lighten -composite E:\z1.jpg

【问题讨论】:

  • 请阅读How to Ask。显示图片、代码、实际结果、预期结果
  • "那么有没有更快的方法..."我会更关心工作的方法...显然变形操作是不适合这种情况
  • 不在电脑附近,但这有帮助吗? stackoverflow.com/a/41633319/2836621

标签: python image-processing imagemagick ocr


【解决方案1】:

您的 ImageMagick 命令是错误的,甚至不应该工作。您需要使内核成为水平线而不是垂直线,并且内核需要更长的线。请尝试以下操作:

magick 1sa.jpg -morphology bottomhat "20x1:0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0" -negate result.png  

根据需要调整内核长度以优化您的结果。

【讨论】:

  • 感谢它的工作原理:) 但是有没有一种方法可以填充文本附近的 1 个白色像素,这些像素是由于去除了线条以提高 ocr 准确性?
  • 我不知道。 ImageMagick 怎么知道被删除的那部分线不是那条线,实际上是角色的一部分。旁白:如果我之前的回答有帮助,请考虑给它投票
  • 有时您需要对 StackOverflow 新用户的问题进行投票,以便他们有足够的分数来投票给您的答案... ;-)
【解决方案2】:

这个 ImageMagick 命令的结果是否更好?

convert 1sa.jpg -morphology bottomhat "20x3:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" -negate result.png  

【讨论】:

  • 不,它不起作用我的意思是我想要输出图像,这样 ocr 就不会检测到文本附近的白色像素(肉眼可以看到)。并感谢您的帮助:)
  • 背景为白色。我怎么知道你指的是什么白色像素?
  • 抱歉没有正确解释,我将那些白色像素重新着色为红色 [1]:i.stack.imgur.com/umqer.jpg
  • 你可以试试 -morphology open diamond:1 或 square:1。但我怀疑这会填写您不想要的其他地方。或者创建自己的内核,按照您想要捕捉那些白色像素的方式进行塑造。不幸的是,删除与你的角色相交的长水平线会删除你的角色的一部分,因为它不知道这条线穿过你的角色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
  • 2017-07-16
  • 1970-01-01
  • 2019-05-26
相关资源
最近更新 更多