极智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 实现图像裁剪方法的主要内容,如果未能解决你的问题,请参考以下文章