Python图像处理标准库Pillow(PIL)——Image常用内容整理

Python Imaging Library,是Python的图像处理标准库,但只支持到2.7系列,因此,众多志愿者在PIL的基础上创建了兼容的版本,支持最新Python 3.x,又加入了许多新特性————Pillow。
Image 类是 PIL(Pillow) 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。

导入

from PIL import Image

打开文件

open()

打开并标识给定的图像文件。
实例化类方法:
实例化对象 = Image.open(‘图片.图片格式’)

from PIL import Image
im = Image.open('cat.jpg')
# 显示导入图片
im.show()

打开图片将图片旋转90度,并查看图片。
from PIL import Image
im = Image.open("cat.jpg")
im.rotate(90).show()

如果格式不指定图片格式,会自动识别文件内容格式

新建图像

new()

使用给定的模式和大小创建新图像。
实例化对象 = Image.new(模式,大小,颜色= 0 )
模式:用于设置新建图片模式参考位置(RGB、RGBA等)
大小:图像大小(长 X 宽)(分辨率)
颜色: 可以直接填入常用颜色名称
可以填入十六纸质标的的颜色(#FF0099)
可以传入元组,(255,255,255)

from PIL import Image
im = Image.new('RGB', (200, 100), 'red')
im.show()

保存图片

save()

save(‘保存名称.图片格式’)

im.save('picture.jpg')

保存的时候,如果没有指定图片格式的话,那么Pollow会根据输入的后缀名决定图片的格式。

坐标系

Python Imaging Library使用笛卡尔像素坐标系,左上角有(0,0)。请注意,坐标指的是隐含的像素角; 寻址为(0,0)的像素的中心实际上位于(0.5,0.5)。

坐标通常作为2元组(x,y)传递给库。矩形表示为4元组,左上角首先给出。例如,覆盖所有800x600像素图像的矩形被写为(0,0,800,600)。

常用属性

PIL.Image.filename

打印图像源文件的文件名或者路径,只有使用open()方法创建的对象有这个属性。
类型:字符串

PIL.Image.format
加粗样式
图像源文件的文件格式。
对于库本身创建的图像。
类型:字符串

PIL.Image.mode

图像的模式,一般来说是“1”, “L”, “RGB”, 或者“CMYK” 。
类型:字符串

PIL.Image.size

图像的大小
类型:(宽,高)

PIL.Image.width

图像的宽度
类型:整型

PIL.Image.height

图像的高度
类型:整型

PIL.Image.info

保存与图像相关的数据的字典。
类型:字典

示例

from PIL import Image
im = Image.open('cat.jpg')
print(im.filename)
print(im.format)
print(im.mode)
print(im.size)
print(im.width)
print(im.height)
print(im.info)
输出结果:
cat.jpg
JPEG
RGB
(1280, 853)
1280
853
{'jfif': 257, 'jfif_version': (1, 1), 'dpi': (72, 72), 'jfif_unit': 1, 'jfif_density': (72, 72)}

常用方法

显示图像

Image.show(title = None,command = None )
显示此图像。此方法主要用于调试目的。
参数:
title - 用于图像窗口的可选标题。
command - 用于显示图像的命令

复制图像

copy()
copy()方法复制图像


from PIL import Image

im = Image.open('cat.jpg')
copy_im = im.copy()
copy_im.show()

裁剪图片

crop()
crop()方法用做裁剪图像,该方法需传入矩形元组参数,返回一个新的Image对象,对原图没有影响。

crop_im = im.crop((矩形参数))

示例
from PIL import Image

im = Image.open('cat.jpg')
# 复制
copy_im = im.copy()

# 裁剪图片
crop_im = im.crop((420, 150, 860 , 560))
crop_im.show()

原图
Python图像处理标准库Pillow(PIL)——Image常用内容整理_第1张图片

裁剪后图片
Python图像处理标准库Pillow(PIL)——Image常用内容整理_第2张图片

粘贴图片方法

paste()
paste(用来粘贴的图片,(位置坐标))
可以通过设置位置坐标来确定粘贴图片的位置
注: 该方法没有返回值,直接作用于原图片

示例

from PIL import Image

im = Image.open('cat.jpg')
# 复制
copy_im = im.copy()
# 裁剪图片
crop_im = copy_im.crop((420, 150, 860 , 560))
# 粘贴图片
im.paste(crop_im, (0, 0)) # 左上角原点位置
im.show()

执行结果
Python图像处理标准库Pillow(PIL)——Image常用内容整理_第3张图片

调整图片大小

**resize()**方法会返回一个设定了大小的Image对象。

示例

resized_im = im.resize((width, height))

thumbnail()
thumbnail()方法可以用来制作缩略图,可接收二元数组作为缩略图的尺寸,然后将示例缩小到指定尺寸。

from PIL import Image

im = Image.open('cat.jpg')
#获得图像尺寸
w, h = im.size
# 缩放到50%
im.thumbnail((w//3, h//3))
#显示图片
im.show()

resize()与thumbnail()的区别,resize()会改变图片原比例,thumbnail()会根据width属性等比例缩放。
旋转图片

rotate()
此方法返回此图像的副本,围绕其中心逆时针旋转给定的度数。

from  PIL import Image

im = Image.open('cat.jpg')
#  逆时针旋转30°
rotate_im = im.rotate(30)
rotate_im.show()

执行结果
Python图像处理标准库Pillow(PIL)——Image常用内容整理_第4张图片

旋转的时候,会将图片超出边界的边角裁剪掉。
如果加入expand=True参数,就可以将图片边角保存住。
from  PIL import Image

im = Image.open('cat.jpg')
rotate_im = im.rotate(30,expand = True)
rotate_im.show()

执行结果
Python图像处理标准库Pillow(PIL)——Image常用内容整理_第5张图片

翻转

transpose()
移调图像(以90度为单位翻转或旋转)

参数:
Image.FLIP_LEFT_RIGHT 水平翻转
Image.FLIP_TOP_BOTTOM 垂直翻转
Image.ROTATE_90 旋转90度
Image.ROTATE_180 旋转180度
Image.ROTATE_270 旋转270度
Image.TRANSPOSE 水平翻转并旋转90度
Image.TRANSVERSE 水平翻转并旋转270度

from  PIL import Image

im = Image.open('cat.jpg')
tran_im = im.transpose(Image.FLIP_LEFT_RIGHT)
tran_im.show()
获取图片通道名称

getbands()
获取图片通道名称,返回元组

im.getbands()
通过通道分割图片

split()
split()可以将多通道图片按通道分割为单通道图片。返回各个通道的灰度图组成的元组。
split()方法返回的是一个元祖,元祖中的元素则是分割后的单个通道的图片。

R, G, B = im.split()

代码示例

from PIL import Image
# 打开图片
im = Image.open('cat.jpg')
# 获取图片通道名称
get_im = im.getbands()
# 打印通道信息
print(get_im)
# 通过通道分割图片
R,G,B = im.split()
# 展示图片
R.show()
G.show()
B.show()

执行结果

('R', 'G', 'B')

Python图像处理标准库Pillow(PIL)——Image常用内容整理_第6张图片
Python图像处理标准库Pillow(PIL)——Image常用内容整理_第7张图片
Python图像处理标准库Pillow(PIL)——Image常用内容整理_第8张图片

获取单个通道的图片

getchannel(channel)可以获取单个通道的图片:

R = im.getchannel("R")
图像模式转换

convert()
参数:
mode - 请求的模式。
matrix - 可选的转换矩阵。如果给定,则应该是包含浮点值的4或12元组。
抖动 - 抖动方法,在从“RGB”模式转换为“P”或从“RGB”或“L”转换为“1”时使用。可用方法为NONE或FLOYDSTEINBERG(默认值)。请注意,在提供矩阵时不使用此选项。
palette - 从“RGB”模式转换为“P”时使用的Palette。可用的调色板是WEB或ADAPTIVE。
colors - 用于自适应调色板的颜色数。默认为256。

返回值:图像的转换副本

img = im.convert("L") 
获取单个像素的值

使用getpixel(x,y)方法可以获取单个像素位置的值:

from PIL import Image

im = Image.open('cat.jpg')
print(im.getpixel((20,20)))
img = im.convert('L')
print(img.getpixel((20,20)))

传入x,y需要一个元组类型的坐标。
如果图像是多通道则返回一个元组
结果

(186, 123, 54)
133
注:L模式经常用来处理图像识别,数据方便分析处理
加载图片全部数据

load()

为图像分配存储并加载像素数据。在正常情况下,您不需要调用此方法,因为Image类在第一次访问时会自动加载打开的图像。
但使用load()可以方便我们修改像素的值。

from PIL import Image

im = Image.open('cat.jpg')
pix = im.load()
print(pix [20,20])
pix [20,20] =255
print(pix)
im.show()

此方法返回的是一个PyAccess类,可以通过这个类的索引来对指定坐标的像素点进行修改。

获取全部像素内容

getdata()
将此图像的内容作为包含像素值的序列对象返回。序列对象被展平,因此第一行的值紧跟在第0行的值之后,依此类推。

参数
band:通道,当 band = None 时,方法返回所有通道的像素内容;要返回单个波段,请传入索引值(例如0以从“RGB”图像获取"R"波段)
返回值:一个类序列的对象。

请注意,此方法返回的序列对象是内部PIL数据类型,仅支持某些序列操作。
要将其转换为普通序列(例如用于打印),请使用list(im.getdata())。
from PIL import Image

im = Image.open('cat.jpg')
# 获取所有通道的值,类似生成器的对象
print(im.getdata())
# 获取第一个通道的值,生成类序列对象,转化为列表打印
print(list(im.getdata(0)))
关闭图片并释放内存

close()
关闭图像映像释放内存。之后图片数据将无法使用。

im.close()

你可能感兴趣的:(学习笔记)