我正在尝试识别扫描PDF文件中的图像(而不是文本),最好使用Python。有没有办法做到这一点?以一个简单的例子为例,假设您已经扫描了一本书的章节。页面有三种可能的选项:
1. 仅包含文本 2. 仅包含图像(或多个) 3. 同时包含文本和图像
我想输出一个列表,列出属于第2或第3类的页面。
1. 仅包含文本 2. 仅包含图像(或多个) 3. 同时包含文本和图像
我想输出一个列表,列出属于第2或第3类的页面。
magick page-28.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 result.png
And I get this:
page-25.png
page-26.png
page-27.png
page-28.png
上述命令的解释...
在上述命令中,我没有使用阈值处理,而是进行了颜色减少到2个颜色,然后将其转换为灰度图像并进行归一化处理 - 基本上应该选择黑色和背景颜色作为两种颜色,并且当它们被转换为灰度并进行归一化处理时,它们将变成黑色和白色。
然后,我使用200像素高的结构元素进行中值滤波,这比几行要高,因此应该能够识别高的特征 - 垂直线。
解释结束
接着...
所以,如果我反转图像,使黑色变为白色,白色变为黑色,然后取均值并乘以图像中像素的总数,那么就可以知道有多少个像素是垂直特征的一部分:
convert page-28.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 -negate -format "%[fx:mean*w*h]" info:
90224
convert page-27.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 -negate -format "%[fx:mean*w*h]" info:
0
以下是一些提示...
提示
您可以查看PDF中有多少页,像这样 - 虽然可能有更快的方法:
convert -density 18 book.pdf info:
提示
您可以像这样提取PDF的一页:
convert -density 288 book.pdf[25] page-25.png
提示
如果您正在处理多本书籍,您可能希望将图像标准化,使它们的高度都为1000像素,然后计算中值时结构元素的大小应该是相当一致的。
numpy
库通常在执行此类任务时速度很快。 - Dhruva