用Python做图片数据增强原来如此简单

目的

在深度学习中,我们需要大量的数据,但是通常直接在现实中获取数据的难度很高,成本也非常高,时间耗费也一样让人难以承受。

所以大家就想,能不能把现有的数据进行人工处理一下,产生人造新数据,达到增加训练数据的目的呢?

这就是我们所谓的数据增强

而本文会通过最简单的方法,告诉大家如何用 3 个常用模块,来实现图像领域的数据增强!

所需 Python 模块

这里我们用到的是:

  1. numpy,这个就不解释了!
  2. matplotlib.pyplot,这个主要是用来显示图片
  3. PIL,这个是对图片进行变化操作

案例

Talk is cheap, show me the code!

# 导入需要的包
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import os

# 获取当前的路径
currentpath = os.getcwd()
print(currentpath)

# 读入图片
image = Image.open('./cat.jpg')
image = np.array(image)
# 查看数据形状,其形状是[H, W, 3],
# 其中H代表高度, W是宽度,3代表RGB三个通道
image.shape

首先显示原始图片:

# 原始图片
plt.imshow(image)

在这里插入图片描述
然后获取垂直翻转后的图片:

# 垂直方向翻转
# 这里使用数组切片的方式来完成,
# 相当于将图片最后一行挪到第一行,
# 倒数第二行挪到第二行,..., 
# 第一行挪到倒数第一行
# 对于行指标,使用::-1来表示切片,
# 负数步长表示以最后一个元素为起点,向左走寻找下一个点
img2 = image[::-1, :, :]
plt.imshow(img2)

在这里插入图片描述

# 水平方向翻转
img3 = image[:, ::-1, :]
plt.imshow(img3)

在这里插入图片描述

#  高度方向裁剪
H, W = image.shape[0], image.shape[1]
# 注意此处用整除,像素位置必须为整数
H1 = H // 2 
img4 = image[0:H1, :, :]
plt.imshow(img4)

在这里插入图片描述

#  宽度方向裁剪
W1 = W//6
W2 = W//3 * 2
img5 = image[:, W1:W2, :]
plt.imshow(img5)

在这里插入图片描述

# 两个方向同时裁剪
img6 = image[0:H1, W1:W2, :]
plt.imshow(img6)

在这里插入图片描述

# 调整亮度
img7 = image * 0.5
plt.imshow(img7.astype('uint8'))

调

# 调整亮度
img8 = image * 2.0
# 由于图片的RGB像素值必须在0-255之间,
# 此处使用np.clip进行数值裁剪
img8 = np.clip(img8, a_min=None, a_max=255.)
plt.imshow(img8.astype('uint8'))

在这里插入图片描述

#高度方向每隔一行采样
img9 = image[::2, :, :]
plt.imshow(img9)

在这里插入图片描述

#宽度方向每隔一列采样
img10 = image[:, ::2, :]
plt.imshow(img10)

在这里插入图片描述

#间隔行列采样,图像尺寸减半,清晰度减半
img11 = image[::2, ::2, :]
plt.imshow(img11)
img11.shape

在这里插入图片描述
我们调整后的图片存贮下来:

# 保存图片
img_3 = Image.fromarray(img3)
img_3.save('img3.jpg')

在批量操作的时候,可以考虑综合应用文件路径操作,或者正则表达式,可以很容易完成。大家有什么疑问欢迎留言探讨!

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值