如何放大图片以使其达到300 DPI?

时间:2009-02-07 23:22:55

标签: c++ image-processing computer-vision tesseract

问题C++ Library for image recognition: images containing words to string的接受答案建议您:

  1. 升级/缩小输入图像至300 DPI。
  2. 我该怎么做...我的印象是DPI是用于显示器,而不是图像格式。

5 个答案:

答案 0 :(得分:2)

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

许多图像格式都记录了DPI。如果扫描图像,则应该是扫描仪的确切设置。如果它来自数码相机,它总是说72 DPI,这是EXIF规范规定的默认值;这是因为相机无法知道图像的原始大小。使用成像程序创建图像时,您可能有机会将DPI设置为任意值。这样可以方便地指定您希望如何使用最终图像,并且不会影响图像中包含的细节。

这是上一个问题,询问调整图像大小的细节: How do I do high quality scaling of a image?

答案 1 :(得分:2)

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

理想情况下,应根据给定的字体大小以适当的分辨率扫描源文档,以使图像中的字体高约50像素。如果分辨率太高/太低,您可以使用图形程序轻松重新采样图像(例如GIMP)。您也可以通过图形库以编程方式执行此操作,例如ImageMagick具有许多编程语言的接口。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

“我将如何做到这一点...我认为dpi适用于显示器,而不是图像格式。”

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

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

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

您可以以图像格式将72 dpi更改为1 dpi或6000 dpi,并且在显示器上无论如何都不会产生任何影响。 “升级/缩小到300 dpi”毫无意义。重新采样也不会改变DPI。在Photoshop中试用,在更改DPI时取消选中“重新采样”,您将看到没有任何区别。它不会变大或变小。

对于图像格式,IMO完全没有意义。

答案 4 :(得分:0)

如果您的目标是OCR,则DPI作为原始扫描文档中每英寸图像中的点数有意义。如果你的dpi太低,信息就会永远消失,即使是双三次插值也不会很好地恢复它。如果你的dpi太高,就很容易丢掉一些东西。

完成工作;我是netpbm / pbmplus工具集的忠实粉丝;开始使用的工具是pnmscale,但如果您有位图,则需要考虑相关工具,例如pbmreduce