问题的接受答案 用于图像识别的C++库:包含要字符串的单词的图像 建议您:

  1. 将输入图像放大/缩小至 300 DPI。

我该怎么做这个...我的印象是 DPI 是针对显示器的,而不是针对图像格式的。

有帮助吗?

解决方案

我认为这里更准确的术语是 重采样. 。您需要足够高的像素分辨率来支持准确的 OCR。字体大小(例如在 )通常以长度单位而不是像素来测量。由于 72 点 = 1 英寸,因此我们需要每点 300/72 像素才能获得 300 dpi(“每英寸像素”)的分辨率。这意味着典型的 12 点字体的高度(或更准确地说,单倍行距文本中的基线到基线的距离)为 50 像素。

理想情况下,应以给定字体大小的适当分辨率扫描源文档,以便图像中的字体高度约为 50 像素。如果分辨率太高/太低,您可以使用图形程序(例如 GIMP)。您还可以通过图形库以编程方式执行此操作,例如 图像魔术师 它具有许多编程语言的接口。

其他提示

每当您将像素图像与具有图片大小的物理设备相关联时,DPI 就有意义。对于 OCR,它通常表示扫描的分辨率,即扫描的每一英寸将获得多少像素。12 点字体意味着每行打印 12/72 英寸,大写字符可能会占其中的 80%;因此,以 300 DPI 扫描时,其高度约为 40 像素。

许多图像格式都记录了 DPI。如果图像是扫描的,这应该是扫描仪的准确设置。如果它来自数码相机,它总是显示 72 DPI,这是 EXIF 规范规定的默认值;这是因为相机无法知道图像的原始尺寸。当您使用成像程序创建图像时,您可能有机会将 DPI 设置为任意值。这可以方便您指定最终图像的使用方式,并且与图像中包含的细节无关。

这是之前的一个问题,询问调整图像大小的详细信息:如何对图像进行高质量缩放?

OCR 软件通常设计为使用“正常”字体大小。从图像的角度来看,这意味着它将寻找高度可能在 30 到 100 像素范围内的字母。分辨率高得多的图像会产生显得太大的字母,以至于 OCR 软件无法有效处理。同样,较低分辨率的图像无法为软件提供足够的像素来识别字母。

“我要怎么做这个...我的印象是 dpi 是针对显示器的,而不是针对图像格式的。”

DPI 代表每英寸点数。和显示器有什么关系?好吧,我们有一个由三个 RGB 子像素组成的像素。DPI 越高,您在该空间中填充的细节就越多。

DPI 对于显示和打印来说是一个有用的测量值,但没有什么用处......事实上,对于图像格式本身来说,没有什么。

在某些格式中标记 DPI 的原因是指示设备以该分辨率显示,但据我了解,几乎所有设备都会忽略该指令,并尽力优化特定输出的图像。

您可以将图像格式的 72 dpi 更改为 1 dpi 或 6000 dpi,这在显示器上不会产生任何影响。“放大/缩小到 300 dpi”毫无意义。重新采样也不会改变 DPI。在 Photoshop 中尝试一下,更改 DPI 时取消选中“重新采样”,您将看不到任何差异。它不会变大或变小。

在我看来,DPI 对于图像格式来说完全没有意义。

如果您的目标是 OCR,则 DPI 是有意义的,即原始扫描文档中每英寸图像中的点数。如果您的 dpi 太低,信息就会永远消失,甚至双三次插值也无法出色地恢复信息。如果您的 dpi 太高,很容易丢掉一些位。

为了完成工作;我是 netpbm/pbmplus 工具集的忠实粉丝;首先使用的工具是 pnmscale, ,尽管如果您有位图,您需要考虑相关工具,例如 pbmreduce.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top