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

Posted 极智视界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极智AI | OpenCV and torchvision.transforms 实现图像等比例缩放方法相关的知识,希望对你有一定的参考价值。

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

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

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

文章目录

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 !

以上是关于极智AI | OpenCV and torchvision.transforms 实现图像等比例缩放方法的主要内容,如果未能解决你的问题,请参考以下文章

极智AI | opencv 你真的会用吗?

极智AI | python and cpp 实现 TensorRT elementWise Layer

极智开发 | ubuntu源码编译cuda版opencv

极智AI | 谈谈昇腾 CANN AIPP

极智AI | 算能SDK架构

极智AI | 谈谈 caffe 框架