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

Posted 爱吃饼干的小白鼠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pillow库进行图像文件处理(配图详解)相关的知识,希望对你有一定的参考价值。

        大家好,今天我们来学习Pillow的相关知识,本文详解的讲解了使用Pillow库进行图片的简单处理,使用PyCharm开发Python的详细过程和各种第三方库的安装与使用。运用pillow来对图片进行处理,我们先介绍如何安装Pillow库和图象处理基本知识的介绍。本文会介绍如何透明度混合以及遮盖混合。

        Pillow 是 Python Imaging Library的简称,是 Python 语言中最为常用的图像处理库。Pillow 库提供了对 Python3 的支持,为Python3 解释器提供了图像处理的功能。通过使用 Pillow 库, 可以方便地使用 Python 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。        

目录

一、Pillow 库的安装

1.1 pip 安装 pillow

二、图象处理基本知识

2.1 图像的 RGB 色彩模式

2.2 像素阵列

三、Image 模块

3.1 打开和新建

【示例】使用 Image 打开打开一副图片

运行结果如下:

 3.2 混合

(1) 透明度混合处理

【示例】透明度混合图片

 运行效果如下:

(2) 遮罩混合处理

【示例】遮罩混合图片

运行效果如下:

四、 总结


一、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:默认颜色(黑色)
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)))

运行结果如下:

 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 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。

Python图像处理库Pillow入门

http://python.jobbole.com/84956/

 

Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

 1)使用 Image 类
PIL最重要的类是 Image class, 你可以通过多种方法创建这个类的实例;你可以从文件加载图像,或者处理其他图像, 或者从 scratch 创建。

要从文件加载图像,可以使用open( )函数,在Image模块中:

加载成功后,将返回一个Image对象,可以通过使用示例属性查看文件内容:

       format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。size属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。 mode 属性定义了图像bands的数量和名称,以及像素类型和深度。常见的modes 有 “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。
如果文件打开错误,返回 IOError 错误。
只要你有了 Image 类的实例,你就可以通过类的方法处理图像。比如,下列方法可以显示图像:

2)读写图像
PIL 模块支持大量图片格式。使用在 Image 模块的 open() 函数从磁盘读取文件。你不需要知道文件格式就能打开它,这个库能够根据文件内容自动确定文件格式。要保存文件,使用 Image 类的 save() 方法。保存文件的时候文件名变得重要了。除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存。

加载文件,并转化为png格式:

save() 方法的第二个参数可以指定文件格式。
3)创建缩略图

缩略图是网络开发或图像软件预览常用的一种基本技术,使用Python的Pillow图像库可以很方便的建立缩略图,如下:

上段代码对photoshop下的jpg图像文件全部创建缩略图,并保存,glob模块是一种智能化的文件名匹配技术,在批图像处理中经常会用到。
 注意:Pillow库不会直接解码或者加载图像栅格数据。当你打开一个文件,只会读取文件头信息用来确定格式,颜色模式,大小等等,文件的剩余部分不会主动处理。这意味着打开一个图像文件的操作十分快速,跟图片大小和压缩方式无关。

4)图像的剪切、粘贴与合并操作

Image 类包含的方法允许你操作图像部分选区,PIL.Image.Image.crop 方法获取图像的一个子矩形选区,如:

矩形选区有一个4元元组定义,分别表示左、上、右、下的坐标。这个库以左上角为坐标原点,单位是px,所以上诉代码复制了一个 200×200 pixels 的矩形选区。这个选区现在可以被处理并且粘贴到原图。

当你粘贴矩形选区的时候必须保证尺寸一致。此外,矩形选区不能在图像外。然而你不必保证矩形选区和原图的颜色模式一致,因为矩形选区会被自动转换颜色。

5)分离和合并颜色通道

对于多通道图像,有时候在处理时希望能够分别对每个通道处理,处理完成后重新合成多通道,在Pillow中,很简单,如下:

对于split( )函数,如果是单通道的,则返回其本身,否则,返回各个通道。
 6)几何变换

对图像进行几何变换是一种基本处理,在Pillow中包括resize( )和rotate( ),如用法如下:

其中,resize( )函数的参数是一个新图像大小的元祖,而rotate( )则需要输入顺时针的旋转角度。在Pillow中,对于一些常见的旋转作了专门的定义:

7)颜色空间变换

在处理图像时,根据需要进行颜色空间的转换,如将彩色转换为灰度:

8)图像滤波

图像滤波在ImageFilter 模块中,在该模块中,预先定义了很多增强滤波器,可以通过filter( )函数使用,预定义滤波器包括:

BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,使用该模块时,需先导入,使用方法如下:

除此以外,ImageFilter模块还包括一些扩展性强的滤波器:

class PIL.ImageFilter.GaussianBlur(radius=2)

Gaussian blur filter.
参数: radius – Blur radius.

class PIL.ImageFilter.UnsharpMask(radius=2percent=150threshold=3)

Unsharp mask filter.

See Wikipedia’s entry on digital unsharp masking for an explanation of the parameters.

class PIL.ImageFilter.Kernel(sizekernelscale=Noneoffset=0)
Create a convolution kernel. The current version only supports 3×3 and 5×5 integer and floating point kernels.

In the current version, kernels can only be applied to “L” and “RGB” images.

参数:
  • size – Kernel size, given as (width, height). In the current version, this must be (3,3) or (5,5).
  • kernel – A sequence containing kernel weights.
  • scale – Scale factor. If given, the result for each pixel is divided by this value. the default is the sum of the kernel weights.
  • offset – Offset. If given, this value is added to the result, after it has been divided by the scale factor.
class PIL.ImageFilter.RankFilter(sizerank)
Create a rank filter. The rank filter sorts all pixels in a window of the given size, and returns therank‘th value.
参数:
  • size – The kernel size, in pixels.
  • rank – What pixel value to pick. Use 0 for a min filter, size * size / 2 for a median filter, size * size - 1 for a max filter, etc.
class PIL.ImageFilter.MedianFilter(size=3)
Create a median filter. Picks the median pixel value in a window with the given size.
参数: size – The kernel size, in pixels.
class PIL.ImageFilter.MinFilter(size=3)
Create a min filter. Picks the lowest pixel value in a window with the given size.
参数: size – The kernel size, in pixels.
class PIL.ImageFilter.MaxFilter(size=3)
Create a max filter. Picks the largest pixel value in a window with the given size.
参数: size – The kernel size, in pixels.
class PIL.ImageFilter.ModeFilter(size=3)
Create a mode filter. Picks the most frequent pixel value in a box with the given size. Pixel values that occur only once or twice are ignored; if no pixel value occurs more than twice, the original pixel value is preserved.
参数: size – The kernel size, in pixels.

更多详细内容可以参考:PIL/ImageFilter

  9)图像增强

图像增强也是图像预处理中的一个基本技术,Pillow中的图像增强函数主要在ImageEnhance模块下,通过该模块可以调节图像的颜色、对比度和饱和度和锐化等:

图像增强:

class PIL.ImageEnhance.Color(image)
Adjust image color balance.

This class can be used to adjust the colour balance of an image, in a manner similar to the controls on a colour TV set. An enhancement factor of 0.0 gives a black and white image. A factor of 1.0 gives the original image.

class PIL.ImageEnhance.Contrast(image)
Adjust image contrast.

This class can be used to control the contrast of an image, similar to the contrast control on a TV set. An enhancement factor of 0.0 gives a solid grey image. A factor of 1.0 gives the original image.

class PIL.ImageEnhance.Brightness(image)
Adjust image brightness.

This class can be used to control the brighntess of an image. An enhancement factor of 0.0 gives a black image. A factor of 1.0 gives the original image.

class PIL.ImageEnhance.Sharpness(image)
Adjust image sharpness.

This class can be used to adjust the sharpness of an image. An enhancement factor of 0.0 gives a blurred image, a factor of 1.0 gives the original image, and a factor of 2.0 gives a sharpened image.

图像增强的详细内容可以参考:PIL/ImageEnhance

除了以上介绍的内容外,Pillow还有很多强大的功能:

PIL.Image.alpha_composite(im1, im2)

PIL.Image.blend(im1, im2, alpha)

PIL.Image.composite(image1, image2, mask)
PIL.Image.eval(image, *args)

PIL.Image.fromarray(obj, mode=None)

PIL.Image.frombuffer(mode, size, data, decoder_name=’raw’, *args)

     想了解更多,请参考:Image Module Pillow Reference













以上是关于Pillow库进行图像文件处理(配图详解)的主要内容,如果未能解决你的问题,请参考以下文章

Python图像处理库Pillow入门

图像识别的前期工作——使用pillow进行图像处理

pillow教程

Python图像处理库:Pillow 初级教程

图像处理基本工具——Python 环境下的 Pillow( PIL )

AI常用框架和工具丨4. 图像处理库Pillow