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

Posted 极智视界

tags:

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

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

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

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

文章目录

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 <opencv2/opencv.hpp>

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

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

  好了,以上分享了 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 框架