【问题标题】:Adding white line between text lines在文本行之间添加白线
【发布时间】:2018-06-22 09:23:39
【问题描述】:

我正在尝试使用 Tesseract 进行 OCR,总体结果似乎可以接受。图像是非常长的收据,我们正在使用扫描仪扫描,质量更好。唯一的问题是收据中两行之间很少有字符

请查看随附的示例图片。您可能会看到第一行字符“p”和第二行字符 M 是联合的。这导致 OCR 出现问题。 所以,真正的问题是我们可以在每个文本行之间添加一条白线或正方形吗?

【问题讨论】:

标签: opencv image-processing imagemagick ocr


【解决方案1】:

您可以在 Imagemagick 中为此图像执行此操作,方法是修剪图像以去除周围的白色并添加相同数量的黑色。然后将该图像平均到一列并寻找最亮的行。我从顶部和底部开始和停止 4 个像素,以避免在这些区域中出现任何非常亮的行。一旦找到最亮的行,我在顶部和底部区域之间拼接 4 行白色,除以该行。这不是最优雅的方式。但它显示了潜力。与保存到数组和使用 for 循环相比,可能会将行值列表通过管道传输到 AWK 并以更有效的方式搜索最大值。带有 Imagemagick 的 Unix 语法。

输入:

max=0
row=0
arr=()
arr=(`convert text.png -fuzz 50% -trim -background black -flatten -colorspace gray -scale 1x! -depth 8 txt:- | tail -n +2 | sed -n 's/^.*gray[(]\(.*\)[)]$/\1/p'`)
num=${#arr[*]}
#echo "${arr[*]}"
for ((i=4; i<num-4; i++)); do
val="${arr[$i]}"
max=`convert xc: -format "%[fx:$val>$max?$val:$max]" info:`
row=`convert xc: -format "%[fx:$val==$max?$i:$row]" info:`
#echo "$i $val $max $row"
done
convert text.png -gravity north -splice 0x4+0+$row text2.png

如果你想要更少的空间,你可以改为-splice 0x1+0+$row,但不会有太大变化。它不是覆盖您的图像,而是在现有行之间插入白色。

但是通过上面的处理,你的 OCR 仍然可能无法识别 p 或 M,因为 p 的底部被切断并附加到 M。

如果您有两行以上的文本,则必须在该列中搜索大致均匀分布的最大值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2018-11-15
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多