OpenCV裁剪返回0:0尺寸,调整图像大小后裁剪得到0×0图像如何解决
问题原因分析与修复方案
根本原因
- Numpy切片语法使用错误:OpenCV读取的图像以Numpy数组格式存储,数组切片遵循
[行起始索引:行结束索引, 列起始索引:列结束索引]的规则,且区间为左闭右开。你写的resized[0:0, h_crop:w_crop]中行的起止索引均为0,直接得到行维度为0的结果;如果h_crop与w_crop取值相等,列维度也会为0,最终输出0×0的空图像。 - 裁剪范围逻辑错误:如果你的需求是从缩放后的图像中裁剪出边长为
min_dimension的正方形,那么裁剪范围的起止值设置不符合预期,不应该将h_crop作为列维度的起始索引。
修复方法
左上角裁剪(从图像左上角取正方形)
直接修改裁剪行的代码即可,将原代码:
cropped = resized[0:0, h_crop:w_crop]
替换为:
cropped = resized[0:h_crop, 0:w_crop]
中心裁剪(从图像中心取正方形,适配更多使用场景)
如果需要裁剪图像的中心区域,可先计算裁剪偏移量再执行裁剪:
# 计算中心裁剪的起始坐标 start_y = (h - h_crop) // 2 start_x = (w - w_crop) // 2 # 执行裁剪 cropped = resized[start_y:start_y + h_crop, start_x:start_x + w_crop]
内容的提问来源于stack exchange,提问作者NccWarp9
相关产品推荐
相关产品推荐

