首页 > 解决方案 > 如何在单个单词处拆分文本屏幕截图?

问题描述

我有单行文本的屏幕截图,如下所示:

截屏

文本是白色背景上的黑色。ImageMagick 是否有命令来识别单词之间空白的位置?

它需要一个阈值,这样它就不会被单个字母之间的小得多的空白所迷惑。

目的是将图像分割成单个单词的图片。示例图像将被拆分为 3 个图像:stack、over 和 flow。

标签: imagemagick

解决方案


您可以在 ImageMagick 中使用形态学将每个单词中的字母混合在一起,这样每个单词都有一个黑色区域。然后使用连接的组件来获取它们的边界框。然后从边界框中裁剪图像。

在 Unix 语法的 ImageMagick 6 中:

输入:

在此处输入图像描述

OLDIFS=$IFS
IFS=$'\n'
bboxArr=(`convert stackoverflow.png +repage \
-morphology erode rectangle:9x100 +repage \
-threshold 0 -type bilevel \
-define connected-components:exclude-header=true \
-define connected-components:verbose=true \
-define connected-components:mean-color=true \
-connected-components 8 null: | grep "gray(0)" | awk '{print $2}'`)
IFS=$OLDIFS
num=${#bboxArr[*]}
echo $num
for ((i=0; i<num; i++)); do
bbox=${bboxArr[$i]}
echo "$i $bbox"
convert stackoverflow.png +repage -crop $bbox +repage stackoverflow_word_$i.png
done

结果:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述


推荐阅读