栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Cocos2d-x

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

Cocos2d-x 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

  大家好,我是极智视界,本文介绍一下 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 !

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号