OCR 前怎么矫正倾斜照片?用 OpenCV 四点透视变换检查结果

手工记录文档四角,用 OpenCV 透视变换到矩形,核对角点、字形和相同 OCR 配置的变化。

拍摄纸张时形成梯形,会让 OCR 的字行和字号不一致。四点透视变换可以把选定纸张角点映射到矩形,适合先整理清晰、平整的文档照片。它不会恢复被遮住的字,也不能修好模糊或折皱。

先确定四个角与输出比例

准备 document.jpg,用图片编辑器读取纸张四角的原图像素坐标,按左上、右上、右下、左下顺序记录。本例四点是自制几何图的坐标,实际照片必须替换。不要把四点按 x 大小简单排序,倾斜照片可能因此交叉。

OCR 前怎么矫正倾斜照片?用 OpenCV 四点透视变换检查结果

python -m pip install opencv-python-headless numpy

示例输出 360×240,只适合相应宽高比例的横向文档;真实 A4 或其他页面应按实际宽高比例设尺寸。输出比例错误会让字形被拉伸,影响识别。

计算变换并检查角点映射

保存为 rectify_document.py,替换 source 和输出尺寸,运行 python rectify_document.py。本地已用自制梯形图验证四角映射和输出尺寸;未执行真实扫描件 OCR,未测量识别率变化。

import cv2
import numpy as np

image = cv2.imread("document.jpg")
if image is None:
    raise ValueError("document.jpg cannot be read")
# Replace these example corners with corners in your original image.
# Order: top-left, top-right, bottom-right, bottom-left.
source = np.float32([[30, 40], [350, 20], [380, 250], [20, 280]])
w, h = 360, 240
target = np.float32([[0, 0], [w-1, 0], [w-1, h-1], [0, h-1]])
matrix = cv2.getPerspectiveTransform(source, target)
rectified = cv2.warpPerspective(image, matrix, (w, h))
mapped = cv2.perspectiveTransform(source[None, :, :], matrix)[0]
assert np.allclose(mapped, target, atol=1e-3)
assert cv2.imwrite("document_rectified.png", rectified)
print("output_width_height", (w, h), "corners_passed")

输出图怎样验收

打开 document_rectified.png,检查四边是否完整、文字行是否更水平、字形是否明显变宽或变窄。再把同一段原图和矫正图交给相同 OCR 配置,逐字核对结果,避免同时换引擎造成无法归因。

corners_passed 只证明这四个坐标按矩阵到达目标角点;选错角或把文本裁掉,断言依然可能通过。因此一定回看页面内容与边缘。

黑边与文字扭曲怎么处理

  • 出现黑边:核对源坐标是否超出原图,是否把图片外的区域映射进来。
  • 页面交叉或严重扭曲:检查角点顺序,四点必须围绕同一张纸。
  • 字行仍弯曲:纸张曲面不满足单平面假设,应重拍或采用适合的去弯曲方案。

这个脚本不自动检测纸张轮廓。先手工点四角建立可核对的基线,再决定是否增加自动边缘检测。

资料与适用范围

本文依据 2026 年 10 月 1 日读取的项目资料编写。安装后请记录实际依赖版本;版本升级时先用小样本核对接口和输出。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30836.html

赞 (0)
AI小管家的头像AI小管家
可解释 AI 工具怎么用?用部分依赖图检查特征与预测的关系
上一篇 1天前
已有向量怎么做相似检索?用 NearestNeighbors 返回余弦距离与文档 ID
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部