智能裁剪 (Smart Crop)
按目标比例自动裁剪图片,通过显著性检测(Saliency Detection)智能选择裁剪框,确保画面中最重要的主体区域被完整保留。
适用场景
- 社交媒体发布:朋友圈 1:1 方图、小红书 3:4、抖音 9:16 竖屏
- 封面图制作:文章封面 16:9、视频封面、公众号头图
- 多平台适配:同一张照片裁剪为不同比例,适配各平台头图规格
- 批量裁剪:对一批图片按统一比例自动裁剪,无需手动选框
- 主体保护:避免裁剪到人物面部、建筑主体等关键内容
依赖
| 依赖包 | 用途 |
|---|---|
opencv-python-headless |
图像处理、显著性检测、人脸检测 |
numpy |
数组运算、加权中心计算 |
安装命令:
pip install opencv-python-headless numpy
使用流程
- 用户提供图片(单张或多张)
- 指定目标比例(如
16:9、1:1、9:16),不指定则默认1:1 - 脚本自动检测画面显著性区域,计算最优裁剪框
- 输出裁剪后的图片,并打印检测到的主体中心坐标与裁剪区域
参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
input |
位置参数 | (必填) | 输入图片路径 |
-o / --output |
可选参数 | 自动生成 | 输出图片路径 |
--ratio |
字符串 | 1:1 |
目标比例,支持 16:9、1:1、4:3、3:2、9:16、3:4、2:3 |
--method |
字符串 | saliency |
裁剪策略:saliency(显著性)、face(人脸优先)、center(纯居中) |
--margin |
整数 | 0 |
裁剪框四周留白像素数 |
调用示例
# 默认 1:1 方图裁剪
python smart_crop.py photo.jpg
# 16:9 宽屏裁剪,输出到指定路径
python smart_crop.py photo.jpg -o cover.jpg --ratio 16:9
# 人脸优先裁剪(适合人像照片)
python smart_crop.py portrait.jpg --ratio 3:4 --method face
# 带留白的居中裁剪
python smart_crop.py landscape.jpg --ratio 16:9 --method center --margin 20
技术要点说明
1. 显著性检测 (Saliency Detection)
使用 OpenCV 的 StaticSaliencyFineGrained_create() 生成显著性图谱,该图谱反映画面中各区域的视觉显著程度。通过计算显著性图的加权质心(image moments),确定画面主体的大致位置。
2. 人脸感知策略 (Face-Aware)
当 --method face 或显著性检测失败时,使用 Haar 级联分类器检测人脸,并在显著性图谱中对人脸区域赋予更高权重,确保裁剪不会切到人物面部。
3. 最优裁剪框算法
- 根据目标比例与原图比例的关系,确定以宽度或高度为基准
- 将裁剪框中心对齐到显著性加权质心
- 若裁剪框越界,则向图像内部平移修正
- 可选 margin 参数在裁剪框四周增加留白
文件结构
smart-crop/
├── SKILL.md # 技能说明文档
└── scripts/
└── smart_crop.py # 核心裁剪脚本