透视矫正
自动检测文档/纸张四角,透视矫正为正视图。支持手动指定角点。
适用场景
- 拍摄的文档/白板/海报有透视变形,需要矫正为正视图
- 用户说"透视矫正" / "文档校正" / "拍歪了矫正" / "梯形校正"
- 需要把倾斜拍摄的画面"拉平"
依赖
pip install opencv-python-headless numpy
使用流程
- 接收一张需要透视矫正的图片
- 自动检测角点:
bash python <skill_dir>/scripts/perspective_fix.py <input.jpg> -o <output.jpg> - 或手动指定四角(当自动检测失败时):
bash python <skill_dir>/scripts/perspective_fix.py <input.jpg> -o <output.jpg> \ --points x1,y1,x2,y2,x3,y3,x4,y4 - 用
present_files展示结果
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
input |
(必填) | 输入图片路径 |
-o, --output |
./perspective_fixed.jpg |
输出路径 |
--points |
无 | 手动指定四角 x1,y1,x2,y2,x3,y3,x4,y4 |
技术要点
- Otsu 自动检测:与"照片转扫描件"skill 相同策略,Otsu 阈值分离纸张(亮)与背景(暗)
- 四边形逼近:取最大轮廓,用
approxPolyDP(0.02 * 周长)逼近四边形;失败则退到最小外接矩形 - 角点排序:用
x+y最小/最大 +x-y最小/最大 确定 左上→右上→右下→左下 顺序 - 目标尺寸计算:取上边和下边的较长者为宽度,左边和右边的较长者为高度
- Lanczos4 重采样:透视变换用最高质量插值
手动指定角点
当自动检测失败(如背景复杂、纸张不明显)时,让用户查看原图并指定四角坐标:
- 四个角按任意顺序给出,脚本会自动排序
- 坐标原点在图片左上角,x 向右 y 向下
文件结构
perspective-corrector/
├── SKILL.md
└── scripts/
└── perspective_fix.py