继续创作,加速生长!这是我参加「掘金日新方案 4 月更文挑战」的第16天,点击检查活动概况
大家好,今日咱们来学习Pillow的相关常识,本文详解的讲解了运用Pillow库进行图片的简略处理,运用PyCharm开发Python的详细进程和各种第三方库的装置与运用。运用pillow来对图片进行处理,咱们先介绍如何装置Pillow库和图象处理根本常识的介绍。本文会介绍如何透明度混合以及隐瞒混合。
Pillow 是 Python Imaging Library的简称,是 Python 语言中最为常用的图画处理库。Pillow 库供给了对 Python3 的支撑,为Python3 解释器供给了图画处理的功用。经过运用 Pillow 库, 能够方便地运用 Python 程序对图片进行处理,例如常见的尺度、格局、颜色、旋转等处理。
一、Pillow 库的装置
Pillow 库是Python开发者最为常见的图画处理库,它供给了广泛的文件格局支撑、强壮的图画处理才能,主要包括图画存储、图画显现、格局转化以及根本的图画处理操作等。 装置 Pillow 库的办法与装置 Python 其他第三方库的办法相同,也能够到 Python 官方网站下 载 Pillow 库的压缩包。
1.1 pip 装置 pillow
pip 装置 pillow,履行如下指令:
pip install pillow
二、图象处理根本常识
咱们在学习pillow之前,咱们首要需求了解图画的根本常识,比方说什么是图画的 RGB 颜色形式,什么是像素啊?
2.1图画的 RGB 颜色形式
咱们知道赤色,绿色,蓝色是最根本的组成颜色,那么,望文生义,RGB便是别离代表着三种颜色。RGB 三个颜色通道的变化和叠加得到各种颜色,其间
R 赤色,取值规模,0-255
G 绿色,取值规模,0-255
B 蓝色,取值规模,0-255
比方,咱们常见的黄色便是由赤色和绿色叠加而来。
赤色的 RGB 表明(255,0,0) 绿色的 RGB 表明(0,255,0)
蓝色的 RGB 表明(0,0,255)黄色的 RGB 表明(255,255,0)
2.2 像素阵列
接下来,咱们说说什么是像素,咱们知道一个点便是像素,那么图片就能够像素的调集。
数字图画能够当作一个整数阵列,阵列中的元素称为像素(Pixel),见下图的数字阵列
每个点代表 1 个像素(Pixel),一个点包含 RGB 三种颜色。也便是 1 个像素包含 3 个字节的 信息:(R,G,B)。假设这个像素是赤色,则信息是:(255,0,0)。那么,理论上咱们只要 操作每个点上的这三个数字,就能完成任何的图形。一幅图画上的一切像素点的信息就完全 能够选用矩阵来表明,经过矩阵的运算完成愈加复杂的操作。
三、Image 模块
Image模块是Pillow库的核心部分。它是用来存储一切类型的图画的主类,它还包含大量的函数办法,用于以各种方法处理图画。Image模块具有很多的功用,比方说
- 图画操作(旋转、转置等)
- 图画组成(混合等)
3.1 翻开和新建
在 Pillow 库中,经过运用 Image 模块,能够从文件中加载图画,或者处理其他图画, 或者从 scratch 中创建图画。在对图画进行处理时,首要需求翻开要处理的图片。在 Image 模块中运用函数 open()翻开一副图片,履行后返回 Image 类的实例。当文件不存在时,会引 发 IOError 错误。运用函数 open()语法格局如下所示。
open(fp,mode)
- (1) fp:指翻开文件的路径。
- (2) mode:可选参数,表明翻开文件的方法,通常运用默认值 r。
在 Image 模块中,能够运用函数 new()新建图画。详细语法格局如下所示:
new(mode,size,color=0)
- (1) mode:图片形式,详细取值如下表
- (2) size:表明图片尺度,是运用宽和高两个元素构成的元组
- (3) color:默认颜色(黑色)
mode(形式) | bands(通道) | 说明 |
“1” | 1 | 数字 1,表明是非二值图画,每个像素用 0 或者 1 共 1 位二进制代 码表明 |
“L” | 1 | 灰度图,每个像素用 8 位二进制代码表明 |
“P” | 1 | 索引图,每个像素用 8 位二进制代码表明 |
【示例】运用 Image 翻开翻开一副图片
from PIL import Image
img=Image.open('text.png')
print('图片的格局:',img.format)
print('图片的巨细:',img.size)
print('图片的高度:',img.height,'图片的宽度:',img.width)
print('获取(100,100)处像素值:',img.getpixel((100,100)))
运行结果如下:
3.2 混合
-
(1) 透明度混合处理
在 Pillow 库的 Image 模块中,能够运用函数 blend()完成透明度混合处理。详细语法 格局如下所示:
blend(im1,im2,alpha)
其间 im1、im2 指参加混合的图片 1 和图片 2,alpha 指混合透明度,取值是 0-1。 经过运用函数 blend(),能够将 im1 和 im2 这两幅图片(尺度相同)以一定的透明度 进行混合。详细混合进程如下:
(im1*(1-alpha)+im2*alpha)
当混合透明度为 0 时,显现 im1 原图。当混合透明度 alpha 取值为 1 时,显现 im2 原图片。
【示例】透明度混合图片
from PIL import Image
img1=Image.open('1pqyq3.jpg').convert(mode='RGB')
img2=Image.new('RGB',img1.size,'red')
# img2.show()
Image.blend(img1,img2,alpha=0.5).show()
运行作用如下:
-
(2) 遮罩混合处理
在 Pillow 库中 Image 模块中,能够运用函数 composite()完成遮罩混合处理。详细语 法格局如下所示:
composite(im1,im2,mask)
其间 im1 和 im2 表明混合处理的图片 1 和图片 2.mask 也是一个图画,mode 能够为 “1”, “L”, or “RGBA”,而且巨细要和 im1、im2 一样。 函数 composite()的功用是运用 mask 来混合图片 im1 和 im2,而且要求 mask、im1 和 im2 三幅图片的尺度相同。下面的实例代码演示了运用 Image 模块完成图片遮罩混合处理的进程。
【示例】遮罩混合图片
from PIL import Image
img1=Image.open('1pp5o1.jpg')
img2=Image.open('1pp6e1.jpg')
img2=img2.resize(img1.size)
r,g,b=img2.split()
Image.composite(img2,img1,b).show()
运行作用如下:
本次运用的图片为:
履行之后的作用如下:
咱们能够惊喜的发现到两张图片混合到了一同,是不是很奇特,这个便是咱们开头说的隐瞒混合,感兴趣的快去试试吧。
四、 总结
经过本文的学习,咱们简略操作了透明度混合以及隐瞒混合,下一章,咱们会继续介绍pillow的操作。咱们能够经过运用 Pillow 库, 能够方便地运用 Python 程序对图片进行处理,例如常见的尺度、格局、颜色、旋转等处理。