极智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 库图像裁剪方法
    • 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));

  注意这里的 Rang 坐标的起始和终止的含义:sourceImg(Range(start_row, end_row), Range(start_col, end_col))

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


在这里插入图片描述

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

你可能感兴趣的:(极智AI,opencv,人工智能,计算机视觉,图像处理,算法)