极智AI | OpenCV and torchvision.transforms 实现图像等比例缩放方法

极智AI | OpenCV and torchvision.transforms 实现图像等比例缩放方法,第1张

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

  大家好,我是极智视界,本文介绍一下 OpenCV 和 torchvision.transforms 库实现图像等比例缩放方法。

  图像缩放这个过程也即 resize,是 CV 预处理阶段不可或缺的步骤。resize *** 作方法十分丰富,从 resize 插值算法来说一般有 最近邻、双线性、双三次、基于像素区域关系、兰索斯插值 等;从缩放方式来说一般有 不等比例缩放 和 等比例缩放 之分。这里我们来看看等比例缩放的实现。

文章目录
    • 1 torchvision.transforms 库图像等比例缩放
    • 2 OpenCV 库图像等比例缩放
      • 2.1 python 实现
      • 2.2 C++ 实现

1 torchvision.transforms 库图像等比例缩放

  torchvision.transforms 库在深度学习模型预处理中应用广泛,这个时候一般就不用 opencv 去做一些预处理 *** 作了,一般就用 torchvison.transforms.Compose 把 torchvison.transforms 中的一些图像处理方法包在一起形成整个模型的预处理模块。来介绍一下 torchvision.transforms 中图像等比例缩放的实现方式。

import torchvision.transforms as F
from PIL import Image

## 读图
sourceImg = Image.open(imgPath)

## torchvision.transforms 的等比例缩放
_resize = F.Resize(224, interpolation=F.InterpolationMode.BICUBIC)
resizeImg = _resize(sourceImg)

## 来看看 torchvision.transforms 的非等比例缩放,看看有啥区别
_resize = F.Resize((224, 224), interpolation=F.InterpolationMode.BICUBIC)
resizeImg = _resize(sourceImg)

  可以看到 等比例缩放 和 非等比例缩放的实现差别比较小,只是一个是 224,一个是 (224, 224)。这里比较容易理解错误,说明一下,224 只是指定了第一个维度,第二个维度未指定,缩放时第二个维度就按第一个维度的缩放比例进行缩放,也就是等比例缩放;而 (224, 224) 既指定了第一个维度,也指定了第二个维度,也即固定了输出维度,这样就是非等比例缩放了(非常原图是个正方形)。


2 OpenCV 库图像等比例缩放

  opencv 就不多说了,应该是应用最为广泛的 CV 库了。

2.1 python 实现
import cv2

## 读图
sourceImg = cv2.imread(imgPath)

## opencv 的等比例缩放 ==> 多种方式
# 方式一:使用比例系数进行缩放
#         这里靠 fx 和 fy 进行调节
resizeImg = cv2.resize(sourceImg, (0, 0), fx = 0.5, fy = 0.5, interpolation=cv2.INTER_NEAREST)

# 方式二:使用等比例尺寸进行缩放
#        这里靠缩放尺寸进行调节
resizeImg = cv2.resize(sourceImg, (int(img_H / 0.5)), int(img_W / 0.5), interpolation=cv2.INTER_NEAREST)
2.2 C++ 实现
/// 读图
cv::Mat sourceImg = cv::imread(imgPath);

/// opencv 的等比例缩放 -> 多种方式
// 方式一:使用比例系数进行缩放
//        这里靠 fx 和 fy 进行调节
cv::Mat resizeImg;
cv::resize(sourceImg, resizeImg, cv::Size(0, 0), 0.5, 0.5, cv::INTER_NEAREST);

// 方式二:使用等比例尺寸进行缩放
//        这里靠缩放尺寸进行调节
cv2.resize(sourceImg, resizeImg, (int(img_H / 0.5)), int(img_W / 0.5), cv::INTER_NEAREST)

  好了,以上分享了 OpenCV 和 torchvision.transforms 实现图像等比例缩放的方法。希望我的分享能对你的学习有一点帮助。


扫描下方二维码即可关注我的微信公众号【极智视界】,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1353499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)

保存