【深度学习实验】图像处理(二):PIL 和 PyTorch(transforms)中的图像处理与随机图片增强

news/2024/11/15 5:58:24/

文章目录

  • 一、实验介绍
  • 二、实验环境
    • 1. 配置虚拟环境
    • 2. 库版本介绍
  • 三、实验内容
    • 0. 导入需要的工具包
    • 1. PIL图像处理
      • a. 生成绿色和蓝色图像
      • b. 缩放和合成图像
      • c 在合成图像上添加文字
      • d. 展示并保存图像
    • 2. PIL随机图像增强
      • a. 定义随机图像增强函数
      • b. 实验结果展示
    • 3. PyTorch:使用transforms实现随机图像增强
      • a. 定义PyTorch随机图像增强函数
      • b. 实验结果展示

一、实验介绍

  图像处理是计算机视觉和深度学习领域中不可或缺的一部分,本文将介绍Python Imaging Library(PIL)和PyTorch中的图像处理与增强方法,以及如何随机对图像进行增强操作。

本实验将将通过PIL库完成图片生成、合成、添加文字等操作,并分别PIL使用PyTorch中的transforms模块实现图像增强功能。

二、实验环境

  本系列实验使用了PyTorch深度学习框架,相关操作如下:

1. 配置虚拟环境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
 conda install scikit-learn

2. 库版本介绍

软件包本实验版本目前最新版
matplotlib3.5.33.8.0
numpy1.21.61.26.0
python3.7.16
scikit-learn0.22.11.3.0
torch1.8.1+cu1022.0.1
torchaudio0.8.12.0.2
torchvision0.9.1+cu1020.15.2

三、实验内容

【深度学习实验】图像处理(一):Python Imaging Library(PIL)库:图像读取、写入、复制、粘贴、几何变换、图像增强、图像滤波

0. 导入需要的工具包

1. PIL图像处理

from PIL import Image, ImageDraw, ImageFont, ImageEnhance, ImageFilter
import random
from torchvision import transforms
import matplotlib.pyplot as plt

a. 生成绿色和蓝色图像

  使用PIL生成一张绿色图像和一张蓝色图像,它们的尺寸均为512×512像素。

from PIL import Image# 生成绿色和蓝色图像
size = 512
image_green = Image.new('RGB', (size, size), 'green')
image_blue = Image.new('RGB', (size, size), 'blue')

b. 缩放和合成图像

  将绿色图像缩放并放置在蓝色图像中心,使其占据大约70%的区域。

# 缩放绿色图像并合成
green_scaled = image_green.resize((int(size * 0.7), int(size * 0.7)))
position = ((image_blue.width - green_scaled.width) // 2, (image_blue.height - green_scaled.height) // 2)
image_blue.paste(green_scaled, position)
image_result = image_blue.copy()

c 在合成图像上添加文字

# 在合成图像上添加文字
image_ID = image_result.copy()
draw = ImageDraw.Draw(image_ID)
ID = '深度学习——图像处理'
chinese_ttf = "C:\Windows//Fonts//STKAITI.TTF"
size_foot = 40
chinese_font = ImageFont.truetype(chinese_ttf , size=size_foot)
# print(chinese_font.getsize(ID))
print(chinese_font.getlength(ID))
position_ID = ((size - int(chinese_font.getlength(ID))) // 2, size-60)
# 绘制文本
draw.text(position_ID, ID, font=chinese_font)

d. 展示并保存图像

display(image_ID)
# image_ID.show()
image_ID.save('result.png')

在这里插入图片描述

2. PIL随机图像增强

a. 定义随机图像增强函数

  函数接受自然图像作为输入,并以50%的概率随机应用以下增强方法:旋转、翻转、亮度调整、颜色调整、对比度调整、锐度调整和CONTOUR滤波器。

# 随机应用图像增强
def image_enhancement():img = Image.open('c.jpg')if random.random() < 0.5:# rotate旋转angle = random.randint(-45, 45)img = img.rotate(angle)if random.random() < 0.5:# flip翻转(左右或上下)img = img.transpose(Image.FLIP_LEFT_RIGHT)if random.random() < 0.5:img = img.transpose(Image.FLIP_TOP_BOTTOM)if random.random() < 0.5:# brightness altering亮度调整enhancer = ImageEnhance.Brightness(img)img = enhancer.enhance(random.uniform(0, 1))if random.random() < 0.5:# color altering色彩调整enhancer = ImageEnhance.Color(img)img = enhancer.enhance(factor=1.5)if random.random() < 0.5:# contrastive altering对比度调整enhancer = ImageEnhance.Contrast(img)img = enhancer.enhance(factor=1.5)if random.random() < 0.5:# sharpness altering锐度调整enhancer = ImageEnhance.Sharpness(img)img = enhancer.enhance(random.uniform(0, 2))if random.random() < 0.5:# CONTOUR滤波器img = img.filter(ImageFilter.CONTOUR)return img

b. 实验结果展示

【深度学习】 Python 和 NumPy 系列教程(廿六):Matplotlib详解:3、多子图和布局:subplots()函数

x = 5
y = 5
fig, axs = plt.subplots(x, y, figsize=(32, 32))
for i in range(x):for j in range(y):img = image_enhancement()axs[i, j].imshow(img, aspect='auto')axs[i, j].axis('off')  # 关闭坐标轴
plt.show()

在这里插入图片描述

3. PyTorch:使用transforms实现随机图像增强

a. 定义PyTorch随机图像增强函数

  在PyTorch中,使用transforms模块可以轻松实现相同的随机图像增强功能。

transform = transforms.Compose([transforms.RandomRotation(45, resample=False, expand=False, center=None),transforms.RandomHorizontalFlip(p=0.5),transforms.RandomVerticalFlip(p=0.5),transforms.ColorJitter(brightness=0.5,      # 亮度contrast=0.5,        # 对比度saturation=0.5,      # 抖动饱和度hue=0.5),            # 色调抖动的程度# https://pytorch.org/vision/stable/generated/torchvision.transforms.v2.ColorJitter.html#torchvision.transforms.v2.ColorJitter# transforms.RandomResizedCrop(size=(img.width, img.height), scale=(0.8, 1.0), ratio=(0.75, 1.333)),# 高斯模糊transforms.RandomApply([transforms.GaussianBlur(kernel_size=3)], p=0.5),])

b. 实验结果展示

x = 5
y = 5
fig, axs = plt.subplots(x, y, figsize=(32, 32))
for i in range(x):for j in range(y):img = Image.open('c.jpg')img = transform(img)axs[i, j].imshow(img, aspect='auto')axs[i, j].axis('off')  # 关闭坐标轴
plt.show()

在这里插入图片描述


http://www.ppmy.cn/news/1243131.html

相关文章

编程语言发展史:Ruby语言的发展和应用

介绍 Ruby是一种高级编程语言&#xff0c;最初由日本的松本行弘开发。它在20世纪90年代初首次发布&#xff0c;并在2000年代初开始变得流行。 Ruby是一种动态、面向对象的语言&#xff0c;具有简单、易于学习和使用的语法&#xff0c;因此被广泛应用于Web开发、数据分析、游戏…

2023年03月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 计算“2+4+8+……+128”,用变量n表示每项,根据变化规律,变量n的赋值用下列哪个最合适?( ) A: B: C: D: 答案:D

qt5.15.2及6.0以上版本安装

文章目录 下载在线安装器安装打开软件 下载在线安装器 因为从qt5.15开始不支持离线下载安装了&#xff0c;只能通过在线安装的方式进行安装。 下载在线安装下载器&#xff1a; 这个在线安装下载器网上也都是可以找到。 这里是其放到网盘上的下载地址&#xff1a; 链接&#x…

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步?

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f; 文章目录 【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f;一、简介软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步1 安…

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!

文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置&#xff0c;颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…

[ruby on rails] array、jsonb字段

一、jsonb # 新增 add_column :shi_tis, :setting, :jsonb, default: {}# string转jsonb def changechange_column :users, :setting, :jsonb, using: setting::jsonb, default: {} end# 加索引 add_index :users, :setting, using: :gin # 这样就为setting jsonb字段创建了一…

枚举的第一行

2023年11月26日 问题: 好奇enum的所声明的枚举类的第一行是什么 从java技术卷1中第五章5.6中,了解是枚举类的实例 验证 错误信息: 解释: 此时只有有参构造 在这个枚举类里不能使用空,大概意思是说不能使用空参创建实例 校验 在原有的基础上创建一个无参构造 结果:不再报错,第…

C#,《小白学程序》第二十七课:大数四则运算之“运算符重载”的算法及源程序

1 文本格式 using System; using System.Text; using System.Collections; using System.Collections.Generic; /// <summary> /// 大数的四则&#xff08;加减乘除&#xff09;运算 /// 及其运算符重载&#xff08;取余数&#xff09; /// </summary> public cl…