You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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居中补黑边的图像

代码逻辑解释

  1. 获取原图尺寸:用shape[:2]直接拿到高(h)和宽(w),比反复调用np.shape更简洁直观。
  2. 计算补边距离:通过(700 - 原尺寸) // 2算出顶部和左侧的补边宽度,剩下的补到底部和右侧——这样不管原图尺寸是奇数还是偶数,都能让图像完美居中。
  3. 放置原图到画布:直接通过数组切片把原图赋值到黑画布的对应位置,一步完成居中补边,完全不需要之前的裁剪操作(之前的裁剪逻辑其实是多余的,咱们直接用完整的原图就行)。

对比你之前的方法

这个方法和cv2.resize的核心区别是:它不会拉伸或压缩原图的内容,只是在图像的四周补充黑边,完全保留物体的原始尺寸和比例,完美符合你的需求。

如果你之前的center_contour是已经经过轮廓居中处理的图像,那这个代码直接就能用;如果还没做轮廓居中,那你之前的center_contour生成逻辑没问题,只需要把补边的部分替换成上面的代码就好啦~

备注:内容来源于stack exchange,提问作者user29495475

火山引擎 最新活动