图像处理在深度学习领域中起到了至关重要的作用,Python Imaging Library(PIL)作为一种主流的图像处理库,为图像的读取、处理和增强提供了丰富的功能。
本实验将介绍 PIL 的基本用法,主要包括图像读取、写入、复制、粘贴、几何变换以及图像增强、图像滤波等方面。
本系列实验使用了PyTorch深度学习框架,相关操作如下:
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
软件包 | 本实验版本 | 目前最新版 |
---|---|---|
matplotlib | 3.5.3 | 3.8.0 |
numpy | 1.21.6 | 1.26.0 |
python | 3.7.16 | |
scikit-learn | 0.22.1 | 1.3.0 |
torch | 1.8.1+cu102 | 2.0.1 |
torchaudio | 0.8.1 | 2.0.2 |
torchvision | 0.9.1+cu102 | 0.15.2 |
可以使用以下命令:
pip install pillow
下面,我将介绍如何使用 PIL 的 Image.open
方法读取图像,并使用 display
方法显示图像。展示了如何使用 save
方法将图像保存到设备上、使用 Image.new
构建新的图像。
from PIL import Image
# we can use open api to load image data
img = Image.open('qomolangma.jpg')
print(img.format,img.size)
# show your image
display(img)
import os
# we can utilize save() to write current image to device.
file_name = 'qomolangmah.jpg'
img.save(file_name)
print(os.path.join(os.getcwd(),file_name))
image_new = Image.new('RGB', (50, 50), 'red')
display(image_new)
file_name = 'new.png'
image_new.save(file_name)
print(os.path.join(os.getcwd(), file_name))
PIL 提供了灵活的图像复制和粘贴功能,下面我将介绍全局级别和局部级别的图像复制,以及使用 crop
方法进行局部图像复制。此外,还有图像的粘贴和合并操作。
img = Image.open('qomolangma.jpg')
img_copy = img.copy()
display(img_copy)
rect = (0, 0, 100, 100)
img_copy_local = img.crop(rect)
display(img_copy_local)
img_new = Image.open('new.png')
box = (10, 10, 60, 60)
img.paste(img_new, box)
display(img)
图像的几何变换是图像处理中的重要任务之一,下面我将详细介绍图像的调整大小、旋转和翻转操作。
img = Image.open('qomolangma.jpg')
print(img.size)
img_resize = img.resize((512, 224))
print(img_resize.size)
img_rotate = img.rotate(45)
display(img_rotate)
或使用:
img_rotate = img.transpose(Image.ROTATE_90)
img_rotate = img.transpose(Image.ROTATE_180)
img_rotate = img.transpose(Image.ROTATE_270)
display(img_rotate)
img_flip = img.transpose(Image.FLIP_LEFT_RIGHT)
display(img_flip)
PIL 提供了 ImageEnhance
和 ImageFilter
等 模块,用于图像的亮度、颜色、对比度和锐度的增强。下面,我将通过示例演示如何使用这些模块进行图像增强。
from PIL import ImageEnhance
img = Image.open('qomolangma.jpg')
img_bri = ImageEnhance.Brightness(img)
img_bri_enh = img_bri.enhance(factor=0.5) # factor is from 0 to 1.
display(img_bri_enh)
img_col = ImageEnhance.Color(img)
img_col_enh = img_col.enhance(factor=1.5) # factor is from 0 to postive infinity
display(img_col_enh)
img_con = ImageEnhance.Contrast(img)
img_con_enh = img_con.enhance(factor=1.5) # factor is from 0 to postive infinity
display(img_con_enh)
img_sha = ImageEnhance.Sharpness(img)
img_sha_enh = img_sha.enhance(factor=1.5) # factor is from 0 to 2
display(img_sha_enh)
PIL 的 ImageFilter
模块提供了多种滤波操作,如浮雕(EMBOSS)和轮廓(CONTOUR)等。
from PIL.ImageFilter import EMBOSS, CONTOUR
img_1 = img.filter(EMBOSS)
display(img_1)
img_2 = img.filter(CONTOUR)
display(img_2)