OpenCV resize 与裁剪

620 字
3 分钟
OpenCV resize 与裁剪

OpenCV resize 与裁剪#

resize 和 crop 是视觉任务里最基础的预处理,但也最容易写错宽高顺序。OpenCV 的 resize 参数是 (width, height),而图片 shape 是 (height, width, channels)。

只要这两个顺序混淆,图片比例就会变形,后面的标注和模型输入都会出问题。

resize 的宽高顺序#

img = cv2.imread("demo.jpg")
h, w = img.shape[:2]
resized = cv2.resize(img, (640, 480)) # width=640, height=480
print(w, h, resized.shape)

我通常显式写注释,提醒自己传入的是宽、高。

保持比例缩放#

target_w = 640
scale = target_w / w
target_h = int(h * scale)
resized = cv2.resize(img, (target_w, target_h))

如果不想图像变形,就不要强行拉到固定宽高。目标模型需要固定尺寸时,可以再做 padding。

裁剪要检查边界#

x1, y1, x2, y2 = 100, 80, 300, 260
x1 = max(0, x1)
y1 = max(0, y1)
x2 = min(w, x2)
y2 = min(h, y2)
crop = img[y1:y2, x1:x2]

数组裁剪顺序是 [y1:y2, x1:x2],也就是先高后宽。

和标注联动#

如果图片做了 resize 或 crop,检测框坐标也必须同步变换。只改图片不改标注,会让训练数据直接错位。

实战复盘#

检查《OpenCV resize 与裁剪》这类视觉流程时,我不会只看命令是否完成,而会打开输出文件。视觉任务的质量判断必须回到图像本身:目标是否还在、颜色是否正常、框是否贴合、类别是否正确。

如果处理结果准备进入训练集,我会额外记录数据版本。图片、标签、划分文件和增强策略要能对应到同一个版本,否则模型结果变化时很难解释。

这类文章最适合持续补充错误案例。每遇到一次读图失败、标注错位或预测异常,都可以回到文章里增加一个真实排查点。

最小验收样例#

验收《OpenCV resize 与裁剪》时,我会固定三张图片:一张正常样例、一张边界样例、一张容易失败的样例。每次改代码都用这三张图跑一遍,并保存输出结果。

视觉流程的验收必须能用眼睛确认。只打印数组 shape 或命令成功不够,至少要保存一张中间结果图或最终可视化图,确认处理效果和预期一致。

小结#

OpenCV 预处理要始终区分 shape 的高宽和 resize 参数的宽高。图片变换后,标注也要一起变换。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

OpenCV resize 与裁剪
https://blog.tjcheng.cn/posts/backfill/2026-06-01/opencv-resize-crop-note/
作者
TengJinCheng
发布于
2026-06-01
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
TengJinCheng
Hello, I'm Teng.
公告
欢迎来到TengJinCheng工作铺!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
157
分类
7
标签
114
总字数
109,939
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.4
文章许可
CC BY-NC-SA 4.0

文章目录