当前位置:  开发笔记 > 编程语言 > 正文

图像处理删除线条

如何解决《图像处理删除线条》经验,为你挑选了1个好方法。

我试图得到一个只有文字的图像.我的代码将此图像作为灰度,并删除它的所有长行以及除文本/符号/测量之外的所有内容.

在此输入图像描述 这是可以使用图像处理技术完成的吗?我已经开始查看imagemagick库以及其他一些删除行的解决方案



1> Mark Setchel..:

我有一些想法,我可能会进一步发展其中一些,或者可能不会!


1.使用颜色

该图看起来像是从某个包中生成它,包括Ghostscript,而不是从纸上扫描它,所以我认为你可以控制它的生成.如果是这样,最简单和最干净的选项可能是在Postscript中插入一个命令来改变所有文本的颜色,或者改变所有行和圆的颜色,然后你就可以使用颜色来提取文本.


2.使用过滤器

您可以使用长水平探测元素和中值来确定水平线,使用长垂直探测元素来移除垂直线.显然,你可以摆弄长度等,但这看起来像这样:

convert drawing.png                                              \
  \( -clone 0 -threshold 50% -negate -statistic median 200x1 \)  \
 -compose lighten -composite                                     \
  \( -clone 0 -threshold 50% -negate -statistic median 1x200 \)  \
 -composite result.png

我尝试用200作为长度:

在此输入图像描述

以500为长度:

在此输入图像描述


3.使用连接组件分析或Blob分析

我们的想法是找到图像中的所有斑点,然后删除大于您希望保留的字母大小的斑点.我提取了一部分图像以使用这种方法:

在此输入图像描述

convert extract.png -colorspace gray -negate -threshold 50% \
   -define connected-components:verbose=true                \
   -connected-components 8 -auto-level output.png 

产量

Objects (id: bounding-box centroid area mean-color):
  2: 943x660+77+0 553.0,296.5 536272 srgb(0,0,0)
  0: 73x660+0+0 36.0,329.3 48150 srgb(0,0,0)
  10: 279x176+376+484 507.5,582.9 42374 srgb(0,0,0)
  8: 167x99+488+413 574.9,458.8 8939 srgb(0,0,0)
  5: 291x253+370+407 517.6,486.0 8121 srgb(255,255,255)
  7: 166x83+397+413 477.3,450.4 7479 srgb(0,0,0)
  9: 77x90+578+436 628.7,491.1 3511 srgb(0,0,0)
  6: 81x67+376+413 403.5,438.0 3197 srgb(0,0,0)
  1: 4x660+73+0 74.5,329.5 2640 srgb(255,255,255)
  3: 221x154+124+328 213.8,440.1 2225 srgb(255,255,255)
  4: 198x154+686+378 798.3,488.4 2133 srgb(255,255,255)
  11: 38x59+136+559 154.5,588.1 1094 srgb(255,255,255)
  12: 37x59+790+559 808.0,588.0 955 srgb(255,255,255)
  13: 37x59+837+559 855.0,588.0 955 srgb(255,255,255)
  15: 37x58+230+560 248.6,588.2 888 srgb(255,255,255)
  16: 37x58+742+560 760.6,588.2 888 srgb(255,255,255)
  14: 39x58+180+560 201.5,587.8 862 srgb(255,255,255)   <--- Let's look at this one
  19: 23x45+844+566 855.0,588.0 848 srgb(0,0,0)
  18: 23x45+797+566 808.0,588.0 848 srgb(0,0,0)
  20: 24x22+143+589 154.5,599.5 420 srgb(0,0,0)
  17: 18x16+146+566 154.5,573.6 227 srgb(0,0,0)
  21: 8x11+114+606 117.5,611.0 72 srgb(255,255,255)
  22: 8x11+720+606 723.5,611.0 72 srgb(255,255,255)
  23: 2x20+0+628 0.3,637.5 30 srgb(255,255,255)

这些字段在输出的开头标题,但基本上看blob 14:

 14: 39x58+180+560 201.5,587.8 862 srgb(255,255,255)

它是39像素宽,58像素高,位于距离左上角180,560偏移处,它是白色的(255,255,255),由于我否定了图像,意味着它在原始图像中是黑色的,因此它对应于你的短信(50x70左右).

只是作为解释(对于实际处理不是必需的),让我们将它作为一个矩形绘制到提取物上:

convert extract.png -fill red -draw "rectangle 180,560 219,617" aBlob.png

在此输入图像描述

请注意,我们有图像偏移加上宽度和高度,而以下-draw rectangle命令采用左上角和右下角,因此我们需要将宽度和高度添加到偏移以获得右下角.

很好,所以我们现在可以制作所有字母的面具!

convert extract.png -colorspace gray -negate -threshold 50% -define connected-components:verbose=true -connected-components 8 -auto-level output.png | awk -F"[ x+]" '/255,255,255/ && $4<=50 && $5<=80{printf "fill white rectangle %d,%d %d,%d\n",$6,$7,$6+$4,$7+$5}' > draw.txt

输出(文件中draw.txt)

fill white rectangle 136,559 174,618
fill white rectangle 790,559 827,618
fill white rectangle 837,559 874,618
fill white rectangle 230,560 267,618
fill white rectangle 742,560 779,618
fill white rectangle 180,560 219,618
fill white rectangle 114,606 122,617
fill white rectangle 720,606 728,617
fill white rectangle 0,628 2,648

以下是如何将所有受保护的blob放入掩码中:

convert -size 1020x660 xc:black -draw @draw.txt mask.png

这导致了这个面具:

在此输入图像描述

然后我们可以将蒙版应用于图像:

convert extract.png mask.png -compose copyopacity -composite result.png

在此输入图像描述

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有