OCR 与图像

一张扫描图到底有多大:像素、DPI 和页面尺寸别混为一谈

把图片 DPI 从 72 改成 300,文件属性看起来专业了,文字边缘却没有变清楚。DPI 是物理尺寸换算信息,像素才是图像实际携带的采样点。两者有关联,但改元数据不会凭空增加字形细节。

阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。 把图片 DPI 从 72 改成 300,文件属性看起来专业了,文字边缘却没有变清楚。DPI 是物理尺寸换算信息,像素才是图像实际携带的采样点。两者有关联,但改元数据不会凭空增加字形细节。 先问像素,再问输出尺寸 同样宽度的图,可以通过不同 DPI 标记对应不同打印宽度。OCR 的输入限制通常还涉及总像素、长边和文件体积,不能只检查文件属性里的一个 DPI 值。压缩后的字节大小也不能直接代表解码内存需求。 对比两个只有 DPI 不同的样本 from io import BytesIO from PIL import Image image = Image.new("RGB", (600, 300), "white") def encode(dpi): stream = BytesIO() image.save(stream, format="PNG", dpi=(dpi, dpi)) stream.seek(0) decoded = Image.open(stream) decoded.load() return decoded low, high = encode(72), encode(300) assert low.size == high.size == (600, 300) assert low.tobytes() == high.tobytes() assert low.info["dpi"][0] < high.info["dpi"][0] assert image.width * image.height == 180000 assert 600 / 300 == 2.0 最后一行表示在 300 DPI 假设下,六百像素对应两英寸。PNG 的 DPI 保存可能涉及单位转换与舍入,不应断言读取值与写入值逐位完全相等。这里比较大小关系,并直接检查像素没有变化。 对输入预算使用正确指标 指标 能说明什么 不能说明什么 总像素 基础解码规模 字符是否足够清晰 DPI 元数据 物理尺寸换算 实际新增细节 文件字节数 上传和存储负担 解码后的完整内存量 字符局部高度 字形采样情况 所有页面都同样可读 放大与重新扫描是不同动作 如果原图已经把细小笔画压成同一个像素,插值放大无法恢复原始信息。能重新扫描时,应从采集质量入手;无法重扫时,再比较不同预处理方案。任何“识别提升”都需要在相同标注样本上测量。 评估文档翻译先统一输入 使用 OmniDoc(产品入口) 处理扫描件时,记录像素尺寸和来源质量,有助于比较不同文件的结果。不要仅凭两个文件都标着 300 DPI 就认为条件相同。清晰的输入说明,也能帮助团队决定哪些页需要人工补审。 参考: Pillow Image 。 - 1 -
更新于 2026-10-08