当前位置: 代码迷 >> 综合 >> python 不改变长宽比缩放图片
  详细解决方案

python 不改变长宽比缩放图片

热度:24   发布时间:2024-03-05 23:21:11.0
def letterbox_image(img, inp_dim):"""resize image with unchanged aspect ratio using padding新的尺度: 原始尺度×最小的缩放率。原始的长宽乘以同一个数,高宽比肯定不会改变。且通过 old_w * new_w / old_w,缩放到新的尺度。比如(2000, 4000) -> (200,200), 2000 * min(200/4000, 200/2000) = 100, 4000 * min(200/4000, 200/2000) = 200比如(50, 100) -> (200, 200), 50 * min(4, 2) = 100, 100 * min(4, 2) = 200:param img: 原始图片:param inp_dim: (w, h). 缩放后的尺度:return:"""img_w, img_h = img.shape[1], img.shape[0]w, h = inp_dim  # 缩放(img_w, img_h) -> (w, h)new_w = int(img_w * min(w / img_w, h / img_h))  # (new_w, new_h)是高宽比不变的新的尺度new_h = int(img_h * min(w / img_w, h / img_h))resized_image = cv2.resize(img, (new_w, new_h), interpolation=cv2.INTER_CUBIC)canvas = np.full((inp_dim[1], inp_dim[0], 3), 128)  # 定义画布,大小是(200,200)# 画布_h - 高宽不变_new_hcanvas[(h - new_h)//2:(h - new_h)//2+new_h, (w - new_w) // 2:(w - new_w) // 2 + new_w, :] = resized_imagereturn canvas

 

  相关解决方案