python图像处理模块Pillow--Image模块

1、简介python

PIL:Python Imaging Library,已是Python平台事实上的图像处理标准库了。PIL功能很是强大,但API却很是简单易用git

因为PIL仅支持到Python 2.7,加上年久失修,因而一群志愿者在PIL的基础上建立了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,所以,咱们能够直接安装使用Pillowgithub

 

2、安装函数

使用 pip 命令安装Pillow:spa

$ pip install Pillowrest

 

3、 基本概念code

一、通道视频

每张图片都是由一个或者多个数据通道构成,PIL容许在单张图片中合成相同维数和深度的多个通道。对象

以RGB图像为例,每张图片都是由三个数据通道构成,分别为R、G和B通道。而对于灰度图像,则只有一个通道。blog

对于一张图片的通道数量和名称,能够经过方法getbands()来获取。方法getbands()是Image模块的方法,它会返回一个字符串元组(tuple)。该元组将包括每个通道的名称

方法getbands()的使用以下:

1 from PIL import Image
2 
3 im = Image.open(image_path)  # image_path为图像的绝对路径
4 # 返回图像的通道 5 print(im.getbands(), type(im.getbands()))

输出:('R', 'G', 'B', 'A') <class 'tuple'>

 

二、模式

图像的模式定义了图像的类型和像素的位宽,当前支持以下模式:

1:1位像素,表示黑和白,可是存储的时候每一个像素存储为8bit。
L:8位像素,表示黑和白。
P:8位像素,使用调色板映射到其余模式。
RGB:3x8位像素,为真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,颜色分离。
YCbCr:3x8位像素,彩色视频格式。
I:32位整型像素。
F:32位浮点型像素。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。

能够经过Image对象的mode属性读取图像的模式。其返回值是包括上述模式的字符串

属性mode的使用以下:

1 from PIL import Image
2 
3 im = Image.open(image_path)
4 print(im.mode, type(im.mode))

输出:RGBA <class 'str'>

 

三、尺寸

经过Image对象的size属性能够获取图片的尺寸。图像大小,以像素为单位。大小是一个2元组(宽度、高度)(width, height)

属性size的使用以下:

1 from PIL import Image
2 
3 im = Image.open(image_path)
4 # 返回图像尺寸
5 print(im.size, type(im.size))

输出:(750, 1334) <class 'tuple'>

 

四、坐标系统

PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角。注意:坐标值表示像素的角;位于坐标(0,0)处的像素的中心实际上位于(0.5,0.5)。

坐标常常用于二元组(x,y)。长方形则表示为四元组,前面是左上角坐标。例如,一个覆盖800x600的像素图像的长方形表示为(0,0,800,600)。

 

五、调色板

调色板模式 ("P")使用一个颜色调色板为每一个像素定义具体的颜色值

 

六、信息

使用Image对象的info属性能够为一张图片添加一些辅助信息。这个是字典对象。加载和保存图像文件时,多少信息须要处理取决于文件格式。

存储与图像相关的数据的字典。文件处理程序使用此字典传递从文件中读取的各类非图像信息

属性info的使用以下:

1 from PIL import Image
2 
3 im = Image.open(image_path)
4 # 返回图像信息
5 print(im.info, type(im.info))

输出:{} <class 'dict'>

 

七、滤波器

对于将多个输入像素映射为一个输出像素的几何操做,PIL提供了4个不一样的采样滤波器:

NEAREST:最近滤波。从输入图像中选取最近的像素做为输出像素。它忽略了全部其余的像素。
BILINEAR:双线性滤波。在输入图像的2x2矩阵上进行线性插值。注意:PIL的当前版本,作下采样时该滤波器使用了固定输入模板。
BICUBIC:双立方滤波。在输入图像的4x4矩阵上进行立方插值。注意:PIL的当前版本,作下采样时该滤波器使用了固定输入模板。
ANTIALIAS:平滑滤波。这是PIL 1.1.3版本中新的滤波器。对全部能够影响输出像素的输入像素进行高质量的重采样滤波,以计算输出像素值。在当前的PIL版本中,这个滤波器只用于改变尺寸和缩略图方法。
注意:在当前的PIL版本中,ANTIALIAS滤波器是下采样(例如,将一个大的图像转换为小图)时惟一正确的滤波器。BILIEAR和BICUBIC滤波器使用固定的输入模板,用于固定比例的几何变换和上采样是最好的。

Image模块中的方法resize()和thumbnail()用到了滤波器

方法resize()的使用以下:

语法:Image.resize(size, resample=0)

参数:size-2元组:(宽度、高度),以像素为单位

   resample-可选的重采样过滤器,若是省略,或者图像的模式为“1”或“P”,则将其设置为nearest

1 from PIL import Image
2 
3 course_im = Image.open(course_path)
4 print(course_im.size, type(course_im.size))
5 course_resize = course_im.resize((538, 336))  # 返回此图像的大小调整后的副本
6 print(course_resize.size)

输出:

(750, 400)

(538, 336)

 若是要使用其余滤波器能够经过下面的方法来实现:

from PIL import Image

course_im = Image.open(course_path)
print(course_im.size, type(course_im.size))
course_resize = course_im.resize((538, 336), Image.ANTIALIAS)
print(course_resize.size)

方法thumbnail()的使用以下:

语法:Image.thumbnail(sizeresample=1)

参数:size-2元组:(宽度、高度),以像素为单位

           resample-可选的重采样过滤器,若是省略,则默认为PIL.Image.BICUBIC

把这个图像作成缩略图

请注意,PIL当前版本中的BILINEARBICUBIC并不适合生成缩略图。你应该用ANTIALIAS,除非速度比质量重要得多。

from PIL import Image

im = Image.open(avtar_path)
avtar_im.thumbnail((98, 98))  # 返回None

 

4、Image模块

Image模块是PIL中最重要的模块,它有一个类叫作image,与模块名称相同。Image类有不少函数、方法及属性,接下来将依次对image类的属性、函数和方法进行介绍。

类函数

实例属性

 

实例方法

一、paste(im, box=None, mask=None)  将另外一个图像粘贴到此图像中

参数:

box:要么是一个2元组给出左上角,一个4元组定义左、上、右、下像素坐标,或None(好比(0,0))

mask:可选的掩码图像

注意:若是模式不匹配,则将粘贴的图像转换为此图像的模式

相关文章
相关标签/搜索