Python中实现图像居中补黑边至700×700尺寸的方法
Python中实现图像居中补黑边至700×700尺寸的方法
嗨,我来帮你搞定这个图像居中补黑边的需求!你不想让图像变形、要保留物体原尺寸的想法完全正确,用cv2.resize确实会拉伸图像,咱们直接完善你的代码逻辑就能解决问题,不需要复杂操作~
首先,你的思路是对的:先创建一个700×700的全黑画布,然后把原图居中放进去。之前的代码里的裁剪逻辑其实可以简化,咱们直接一步到位计算原图在黑画布中的位置就好,具体步骤如下:
完整修正后的代码
import numpy as np import cv2 # 假设center_contour是你已经处理好的待补边图像 h, w = center_contour.shape[:2] # 获取原图的高和宽 # 创建700×700的全黑画布 padded_img = np.zeros((700, 700, 3), dtype=np.uint8) # 计算上下左右需要补的黑边宽度,确保原图居中 top = (700 - h) // 2 bottom = 700 - h - top # 处理奇偶差异,保证总高度刚好是700 left = (700 - w) // 2 right = 700 - w - left # 同理处理宽度方向的奇偶问题 # 将原图放到黑画布的居中位置 padded_img[top:top+h, left:left+w] = center_contour # 最终padded_img就是你要的700×700居中补黑边的图像
代码逻辑解释
- 获取原图尺寸:用
shape[:2]直接拿到高(h)和宽(w),比反复调用np.shape更简洁直观。 - 计算补边距离:通过
(700 - 原尺寸) // 2算出顶部和左侧的补边宽度,剩下的补到底部和右侧——这样不管原图尺寸是奇数还是偶数,都能让图像完美居中。 - 放置原图到画布:直接通过数组切片把原图赋值到黑画布的对应位置,一步完成居中补边,完全不需要之前的裁剪操作(之前的裁剪逻辑其实是多余的,咱们直接用完整的原图就行)。
对比你之前的方法
这个方法和cv2.resize的核心区别是:它不会拉伸或压缩原图的内容,只是在图像的四周补充黑边,完全保留物体的原始尺寸和比例,完美符合你的需求。
如果你之前的center_contour是已经经过轮廓居中处理的图像,那这个代码直接就能用;如果还没做轮廓居中,那你之前的center_contour生成逻辑没问题,只需要把补边的部分替换成上面的代码就好啦~
备注:内容来源于stack exchange,提问作者user29495475




