Pillow库进行图像文件处理(一)(配图详解)

简介: Pillow库进行图像文件处理(一)(配图详解)

       大家好,今天我们来学习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),见下图的数字阵列



53.png

       每个点代表 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:默认颜色(黑色)


Pillow 库支持的常用图片模式信息

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)))

运行结果如下:


54.png

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()

运行效果如下:

56.png55.png



  • (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()

运行效果如下:

本次使用的图片为:


57.png

58.png


执行之后的效果如下:


image.png

我们可以惊喜的发现到两张图片混合到了一起,是不是很神奇,这个就是我们开头说的遮盖混合,感兴趣的快去试试吧。


四、 总结

       通过本文的学习,我们简单操作了透明度混合以及遮盖混合,下一章,我们会继续介绍pillow的操作。我们可以通过使用 Pillow 库, 可以方便地使用 Python 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。

相关文章
|
2天前
|
程序员 数据安全/隐私保护 计算机视觉
手把手教你用 Python 去除图片和 PDF 水印
手把手教你用 Python 去除图片和 PDF 水印
127 0
|
2天前
|
计算机视觉 开发者 Python
如何使用 Python 代码的 PIL 库读取和设置图像的像素内容
如何使用 Python 代码的 PIL 库读取和设置图像的像素内容
59 0
|
2天前
|
计算机视觉 Python
OpenCV获取视频文件的属性并动态显示实战(附Python源码)
OpenCV获取视频文件的属性并动态显示实战(附Python源码)
55 0
|
2天前
|
数据安全/隐私保护 Python
使用Python脚本实现图片合成PDF功能
使用Python脚本实现图片合成PDF功能
31 0
|
2天前
|
数据安全/隐私保护 计算机视觉 Python
OpenCV中图像的位运算讲解与实战演示(附Python源码 图文解释)
OpenCV中图像的位运算讲解与实战演示(附Python源码 图文解释)
61 0
|
2天前
|
计算机视觉 Python
OpenCV中图像的零处理与截断处理讲解与实战(附Python源码)
OpenCV中图像的零处理与截断处理讲解与实战(附Python源码)
60 0
|
2天前
|
数据安全/隐私保护 计算机视觉 开发者
OpenCV中使用NumPy模块操作像素讲解及实战(附源码 超详细)
OpenCV中使用NumPy模块操作像素讲解及实战(附源码 超详细)
42 0
OpenCV中使用NumPy模块操作像素讲解及实战(附源码 超详细)
|
8月前
|
人工智能 API 数据安全/隐私保护
Python3,5行代码,Chatxxx能对PDF文件进行旋转、提取、合并等一系列操作,看了这篇,80岁老奶奶走路都不扶墙了。
Python3,5行代码,Chatxxx能对PDF文件进行旋转、提取、合并等一系列操作,看了这篇,80岁老奶奶走路都不扶墙了。
71 0
|
9月前
|
存储 索引 Python
【小白必看】Python图片合成示例之使用PIL库实现多张图片按行列合成
【小白必看】Python图片合成示例之使用PIL库实现多张图片按行列合成
170 0