• 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

Python – 使用letter box方法缩放图片,防止图片缩放时失真

Python 发布于2023-06-05 阅读 4,197次 0次评论 0次点赞 本文共1457个字,阅读需要4分钟。

1 使用letter box方法缩放图片,防止图片缩放时失真

假如我们有一张1920x1080的图片想缩放到224x224,如果不进行任何处理,那么图片肯定会出现失真的问题。如果要把一张920x1080的图片缩放到224x224,我们需要首先保持原始图片的纵横比,然后在需要补齐的部分使用一个默认值填充,这里选择的是128。

具体的示例代码如下:

1.1 使用PIL库

from PIL import Image

def resize_image_with_scale(image, size):
    iw, ih = image.size
    w, h = size
    scale = min(w/iw, h/ih)
    nw = int(iw*scale)
    nh = int(ih*scale)

    image = image.resize((nw, nh), Image.Resampling.BICUBIC)
    new_image = Image.new('RGB', size, (128, 128, 128))
    new_image.paste(image, ((w-nw)//2, (h-nh)//2))
    return new_image

if __name__ == '__main__':
    jpg_file_path = "C:\\Users\\xxx\\Desktop\\a.jpeg"
    img = Image.open(jpg_file_path)

    new_image = resize_image_with_scale(img, size=(224, 224))

    new_image.save("b.jpg")

图片处理前后的效果如下:

Python - 使用letter box方法缩放图片,防止图片缩放时失真-第0张图片

从结果上看,在两边的区域padding了(128,128,128)的这种纯灰度的值。这样就可以保持图片既可以缩放也可以不失真了。

1.2 使用opencv-python库

import cv2
import numpy as np

def resize_image_with_scale(image, size):
    # 获取原始图像的尺寸
    ih, iw = image.shape[:2]
    w, h = size

    # 计算缩放比例
    scale = min(w / iw, h / ih)
    nw = int(iw * scale)
    nh = int(ih * scale)

    # 使用OpenCV的resize函数调整图像大小
    resized_image = cv2.resize(image, (nw, nh), interpolation=cv2.INTER_CUBIC)

    # 创建一个新的图像,背景色为灰色(128, 128, 128)
    new_image = np.full((h, w, 3), (128, 128, 128), dtype=np.uint8)

    # 计算粘贴位置
    x = (w - nw) // 2
    y = (h - nh) // 2

    # 将调整大小后的图像粘贴到新图像上
    new_image[y:y + nh, x:x + nw] = resized_image

    # OpenCV默认使用BGR格式,如果你需要RGB格式,可以转换
    # new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2RGB)

    return new_image

if __name__ == '__main__':
    image_path = 'test.jpg'
    image = cv2.imread(image_path)
    resized_img = resize_image_with_scale(image, (640, 640))

    cv2.imshow('Resized Image', resized_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:Python – 使用letter box方法缩放图片,防止图片缩放时失真

原文链接:https://www.stubbornhuang.com/2645/

发布于:2023年06月05日 16:08:30

修改于:2024年09月20日 11:44:55

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
OpenCV | C++ - 为原始图片添加透明通道,并将图片中的红色区域置为透明并保存
OpenCV
下一篇
Pytorch - 在Pytroch中实现图片HWC与CHW相互转换、RGB与BGR相互转换
Pytorch
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号