极智AI | OpenCV and torchvision.transforms 实现图像裁剪方法

极智AI | OpenCV and torchvision.transforms 实现图像裁剪方法,第1张

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

  大家好,我是极智视界,本文介绍一下 OpenCV 和 torchvision.transforms 库实现图像裁剪的方法。

  图像裁剪这个过程也即 crop,是 CV 数据增强 & 图像预处理的重要步骤。拿 torchvision.transforms 中的裁剪方法来说,就有 CenterCrop、RandomCrop 等之分。其中 CenterCrop 是以输入图的中心点为裁剪中心点做指定 size 的 crop *** 作,一般的数据增强的时候不太会采用这个方式,因为当 size 固定的时候,在相同输入的情况下,多次 CenterCrop 的结果都是一样的,起不到数据增强的作用。相比 CenterCrop,RandomCrop 在数据增强的时候更加常用,区别在于 RandomCrop 的中心点坐标是随机的,并不是输入图像的中心点坐标,因此每次生成的图像都是有差异的,这就达到了数据增强的效果。

文章目录
    • 1 torchvision.transforms 库图像裁剪方法
    • 2 OpenCV 库图像裁剪方法
      • 2.1 python 实现
      • 2.2 C++ 实现

1 torchvision.transforms 库图像裁剪方法

  来看 torchvision.transforms 中图像裁剪方法的实现:

import torchvision.transforms as F
from PIL import Image

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

## torchvision.transforms 中心裁剪
_centerCrop = F.CenterCrop(224)
centerCropImg = _centerCrop(sourceImg)

## torchvision.transforms 随机裁剪 == > 尺寸固定,中心随机
_randomCrop = F.RandomCrop(224)
randomCropImg = _randomCrop(sourceImg)

  解释一下,CenterCrop 解决的是:

  • 扁宽的图片去左右两头,留中间;
  • 窄长的图片去上下两头,留中间;
  • 给裁剪图片填充满空间;

  然后说一下 RandomCrop,一般就是尺寸固定,中心随机。也有高级一些的用法,也就是 RandomSizedCrop ,即在随机中心的同时兼顾了尺寸。


2 OpenCV 库图像裁剪方法

  OpenCV 中并没有直接图像裁剪的函数,而是用索引切片来实现,因为切片很灵活,所以即可以涵盖中心裁剪也可以涵盖随机裁剪,下面介绍 OpenCV 中图像裁剪的 python 和 C++ 实现。

2.1 python 实现
import cv2

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

## 图像裁剪
cropImg = sourceImg([10:200], [20:300])
2.2 C++ 实现
#include 

/// 读图
cv::Mat sourceImg = cv::imread(imgPath);

// 图像裁剪
cv::Mat cropImg;
cropImg = sourceImg(Rang(10, 200), Range(20, 300));

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


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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存