如何识别扫描的PDF文件中的图像?

2023-12-26

我正在尝试识别扫描的 PDF 文件中的图像(而不是文本),最好使用 python。有什么办法可以做到这一点吗?举一个简单的例子,假设您扫描了一本书的一章。页面有三种可能的选项:

  1. 仅包含文字
  2. 仅包含一张(或多张)图像
  3. 包含文本和图像

我想输出属于类别 2 或 3 的页面列表。


我的想法是寻找普通文本中不会出现的特征 - 可能是跨越多行的垂直黑色元素。我选择的工具是图像魔术师它安装在大多数 Linux 发行版上,并且适用于 macOS 和 Windows。我只需在终端的命令提示符下运行它。

因此,我将使用此命令 - 请注意,我将原始页面添加到右侧已处理页面的左侧,并在周围放置红色边框以供说明:

magick page-28.png -alpha off +dither -colors 2 -colorspace gray -normalize -statistic median 1x200 result.png

我明白了:

第25页.png

第26页.png

第27页.png

第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

所以第 28 页不是纯文本,第 27 页是。


这里有一些提示...

Tip

您可以查看 PDF 有多少页,如下所示 - 尽管可能有更快的方法:

convert -density 18 book.pdf info:

Tip

您可以像这样提取 PDF 的页面:

convert -density 288 book.pdf[25] page-25.png

Tip

如果您正在制作多本书,您可能需要对图像进行标准化,以便它们全部都是 1000 像素高,然后结构元素的大小(用于计算中位数)应该相当一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何识别扫描的PDF文件中的图像? 的相关文章

随机推荐

  • 使复选框绑定到可为 null 的 bool 转换,从 null 到 true

    我有一个复选框及其IsChecked属性绑定到可为 null 的布尔值 当我的控件首次加载时 该值为空 并且该复选框显示为灰色 这就是我要的 当用户单击该复选框时 它会转为 false 未选中状态 然而 99 的情况下 用户会想要勾选该复选
  • Julia UndefVarError:未定义子类型

    不清楚为什么我得到ERROR LoadError UndefVarError subtypes not defined执行 jl 文件时 但从 REPL 执行时则不然 E g abstract type Asset end abstract
  • 使用 Eclipse 在远程计算机中运行 Spark/Cloudera 应用程序

    我在理解使用 Scala Spark shell 和 Hadoop 环境进行开发的逻辑架构时遇到了一些问题 为了更好地描述逻辑架构 我画了一个小架构 如图所示 我在我的个人电脑上安装了 Eclipse 我想以远程模式从我的电脑运行 scal
  • C++ Windows API - 如何检索字体缩放百分比

    我想检索 把文字变大 C Windows API 应用程序中的百分比 我知道如何检索缩放 DPI 系数 但我还想包括字体缩放百分比 请参阅附图 上值 而不是下值 最终 我想要制作保留用户字体和 DPI 缩放设置的应用程序 以便完全支持辅助功
  • Kivy 日期选择器小部件

    已解决 请参阅下面的已接受答案的应用程序和功能 kivy DatePicker 小部件的源代码 我一直在学习 Kivy 并决定制作一个日期选择器小部件作为学习练习 import kivy kivy require 1 4 0 from ki
  • 在android中将SQLite数据库与远程mysql数据同步

    android中如何同步SQLite数据库和远程MySQL数据 为了说清楚 我想知道sqlite数据和远程mysql之间的同步是如何工作的 即 当远程mySQL数据库更新时 SQLite数据也应该更新 而无需按下任何按钮或向下滚动 如何使用
  • 使用线程打印奇偶数

    使用线程打印奇偶数 创建一个线程类 两个线程实例 一个将打印奇数 另一个将打印偶数 我做了以下编码 但到了死锁状态 有人可以解释一下这可能是什么原因吗 public class NumberPrinter implements Runnab
  • 我可以在某些列值上使用 pandas 数据框读取一系列行吗?

    这是我的数据 prakash 101 Ram 107 akash 103 sakshi 115 vidushi 110 aman 106 lakshay 99 我想从中选择所有行akash to vidushi或所有行Ram to aman
  • UICollectionview rollToItemAtIndexPath,在动画完成之前不加载可见单元格

    我有一个UICollectionView有 142 个电池 7 5 随时可见 我正在从以下位置移动一个单元格indexPath0 表示 100 但我也想滚动到那个新位置 下面的代码工作正常 但它对移动和滚动进行动画处理 然后加载中央 移动单
  • 如何向 WiX 工具集添加可选 UI

    我已经为项目部署制作了一个安静的安装程序 无需单击任何按钮 但安装过程中会显示一些进度条 这次我想添加一个可选的图形用户界面 默认情况下 当给出参数时 安装程 序应该直接运行而不单击任何内容 比方说 msiexec范围 qf 安装程序会弹出
  • Eclipse:在 log4j.xml 中引用 log4j.dtd

    我已经使用 log4j 有一段时间了 我通常在 log4j xml 的顶部使用它 可能就像许多其他人一样 根据 Google 的说法 这是the方法 显然这是可行的 但是 Eclipse 不提供用于编写 XML 等内容的上下文相关帮助 此外
  • webkit-transform 覆盖 Chrome 13 中的 z-index 排序

    Update 抱歉未能添加我们也分层了很多的小细节div元素彼此叠加z index 在对这个问题进行更多研究之后 似乎webkit transform实际上与z index顺序 并且实际问题与动画本身无关 结束更新 我目前正在开发一个应用程
  • 为什么 getElementsByTagName 返回未定义?

    我正在尝试打电话document getElementsByTagName 我回来了undefined结果 无论我传递什么参数 即使我通过了 我尝试用谷歌搜索它 但所有搜索结果都是关于 getElementsByTagName 结果数组的元
  • C# 字典到 .csv

    我有 C Dictionary我想创建一个 csv从中获取文件 例如我有这本字典 Dictionary
  • 设置 Visual Studio 的“附加到进程”对话框中显示的“标题”值?

    当您在 Visual Studio 中选择 调试 附加到进程 时 显示的对话框具有 标题 列 默认情况下 这显示属于该进程的主窗口的标题 例如 它可能会显示 这是一个漆黑的暴风雨之夜 记事本 如何为没有主窗口的应用程序 例如 Windows
  • 为什么不对临时对象进行非常量引用? [复制]

    这个问题在这里已经有答案了 C 只允许将临时对象分配给 const 引用 它不允许分配临时对象来引用 例如 String a String test Error const String a String test Ok 我到处谷歌搜索这个
  • 为什么我的 ES6(使用 Babel)类在实例方法中显示“this”未定义?

    我正在使用 Hapi JS 在 Node 中构建一个应用程序 我有一个身份验证插件类 它给我带来了各种各样的问题 当我尝试引用时this从类的方法中 我收到一条错误消息this未定义 为什么会发生这种情况 摘录 class OAuth co
  • Spring:将某种类型的数组或列表注入到 bean 中

    如果我有一个界面I以及一些实现它的类 是否可以注入数组I or List i 变成豆子 我发现这可以做到List using i
  • PHP/CodeIgniter - 在 __construct() 中设置变量,但无法从其他函数访问它们

    我很高兴遇到了一些变量范围问题 也许我只是需要更多咖啡 这是我的 简化的 代码 这是在 CodeIgniter 2 中 class Agent extends CI Controller public function construct
  • 如何识别扫描的PDF文件中的图像?

    我正在尝试识别扫描的 PDF 文件中的图像 而不是文本 最好使用 python 有什么办法可以做到这一点吗 举一个简单的例子 假设您扫描了一本书的一章 页面有三种可能的选项 仅包含文字 仅包含一张 或多张 图像 包含文本和图像 我想输出属于