opencv图片缩放

图片缩放原理

  图片缩放是深度学习中常用的图片处理手段,有的图片原始尺寸非常大,放入模型训练容易导致显存爆炸,因此会对原始的图片进行缩放。本章节分别使用opencv的内置接口和自定义接口分别对图片进行缩放。

opencv自带的图片缩放接口

  • 读取原始图片
import cv2
# 读取原始图片
img = cv2.imread("foo-001.jpeg")
cv2.imshow("img", img)
cv2.waitKey(0)

原始图片

  • 调用opencv的接口对原始图片做缩放
import cv2
# 读取原始图片
img = cv2.imread("foo-001.jpeg")
# 将图片resize到(224*224)的大小
img_size = cv2.resize(img, (224, 224))
cv2.imshow("resize", img_size )
cv2.waitKey(0)

resize后的图片
  opencv的缩放操作使得图片里的熊的比例发生变化,这种失真变化可能会导致模型训练效果不好,为此我们需要在缩放图片的同时保持图片内容的比例

自定义缩放接口

import cv2

def img_resize(img, target_size=(224, 224)):
    # 获取原始图像大小
    old_size = img.shape[0:2]
    # 计算原始图像宽高与目标图像大小的比例,并取其中的较小值
    ratio = min(float(target_size[i]) / (old_size[i]) for i in range(len(old_size)))
    # 根据上边求得的比例计算在保持比例前提下得到的图像大小
    new_size = tuple([int(i * ratio) for i in old_size])
    # 根据上边的大小进行放缩
    img = cv2.resize(img, (new_size[1], new_size[0]))
    # 计算需要填充的像素数目(图像的宽这一维度上)
    pad_w = target_size[1] - new_size[1]
    # 计算需要填充的像素数目(图像的高这一维度上)
    pad_h = target_size[0] - new_size[0]
    top, bottom = pad_h // 2, pad_h - (pad_h // 2)
    left, right = pad_w // 2, pad_w - (pad_w // 2)
    img_new = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, None, (0, 0, 0))
    return img_new

img = cv2.imread("foo-001.jpeg")
img_new = img_resize(img, (224, 224))
cv2.imshow("img_new ", img_new )
cv2.waitKey(0)

请添加图片描述
  图片的上下边缘填充了黑边,使得图片内容比例保持不变

结尾

欢迎一起学习、讨论技术!
B站账号:Silver__Wolf_
Q:130856474

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值