如何使用OpenCV按特定模式放大图像避免拉伸变形
OpenCV保持宽高比调整图像尺寸方案
你当前使用的直接指定固定输出尺寸的resize方法会忽略原图的宽高比例,强制拉伸图像到目标尺寸,因此会出现变形问题。你需要实现的是保持原图宽高比等比例缩放后,填充空白区域到目标尺寸的逻辑,实现代码如下:
import cv2 import numpy as np # 读取输入图像 x = cv2.imread("your_image_path.jpg") h, w = x.shape[:2] # 目标尺寸:宽1500,高1600 target_w, target_h = 1500, 1600 # 计算等比例缩放系数,保证缩放后图像不超出目标尺寸 scale = min(target_w / w, target_h / h) new_w = int(w * scale) new_h = int(h * scale) # 等比例缩放图像 resized_img = cv2.resize(x, (new_w, new_h), interpolation=cv2.INTER_AREA) # 计算上下左右需要填充的像素数,实现居中放置 top = (target_h - new_h) // 2 bottom = target_h - new_h - top left = (target_w - new_w) // 2 right = target_w - new_w - left # 填充空白区域,value参数为填充颜色,示例为黑色,可按需修改 result = cv2.copyMakeBorder(resized_img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0])
可选优化说明
- 若当前场景为放大图像,可将插值参数替换为
cv2.INTER_CUBIC或cv2.INTER_LINEAR,获得更清晰的放大效果 - 若不需要居中放置,只需修改
top、left的计算逻辑即可调整对齐方式,比如左对齐可直接将left设为0
内容的提问来源于stack exchange,提问作者Umer Qaisar
相关产品推荐
相关产品推荐

