Python图像处理PIL各模块详细介绍

本文详细介绍了Python图像处理库PIL中的Image模块,包括open、save、convert、mode、size等核心功能,以及各种操作类如Crop、Paste、Filter等,帮助读者全面理解PIL在图像处理中的应用。
摘要由CSDN通过智能技术生成

Image模块

Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内。如opensaveconvershow…等功能。

open类

Image.open(file) ⇒ image
Image.open(file, mode) ⇒ image

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

    @zhangziju
    from PIL import Image             ##调用库
    im = Image.open("E:\mywife.jpg")  ##文件存在的路径
    im.show()                         

我老婆

需要知道的是在win的环境下im.show的方式为win自带的图像显示应用。打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用load()方法将强行加载图像数据)。如果变量mode被设置,那必须是“r”。用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。

Save类

im.save(outfile,options…)
im.save(outfile, format, options…)

若要保存文件,则使用 Image 类的 save() 方法,此时保存文件的文件名就变得十分重要了,除非指定格式,否则这个库将会以文件名的扩展名作为格式保存。使用给定的文件名保存图像。如果变量format缺省,如果可能的话,则从文件名称的扩展名判断文件的格式。该方法返回为空。关键字options为文件编写器提供一些额外的指令。如果编写器不能识别某个选项,它将忽略它。用户可以使用文件对象代替文件名称。在这种情况下,用户必须指定文件格式。文件对象必须实现了seek()、tell()和write()方法,且其以二进制模式打开。如果方法save()因为某些原因失败,这个方法将产生一个异常(通常为IOError异常)。如果发生了异常,该方法也有可能已经创建了文件,并向文件写入了一些数据。如果需要的话,用户的应用程序可以删除这个不完整的文件。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im)
im.save("E:\mywife.png")     ## 将"E:\mywife.jpg"保存为"E:\mywife.png"
im = Image.open("E:\mywife.png")  ##打开新的png图片
print(im.format, im.size, im.mode)

这里写图片描述
如下图,在指定路径下可看到新保存的png格式的图片。
新的png图片

format类

im.format ⇒ string or None

这个属性标识了图像来源,如果图像不是从文件读取它的值就是None。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.format) ## 打印出格式信息
im.show()

如下图可以看到其format为”JPEG”。

format

Mode类

im.mode ⇒ string

图像的模式,常见的mode 有 “L” (luminance) 表示灰度图像,“RGB”表示真彩色图像,和 “CMYK” 表示出版图像,表明图像所使用像素格式。如下表为常见的nodes描述:

modes 描述
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3× 8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素
@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.mode) ## 打印出模式信息
im.show()

如下图为图片的mode为“RGB”模式。

mode

convert类

im.convert(mode)⇒ image

将当前图像转换为其他模式,并且返回新的图像。当从一个调色板图像转换时,这个方法通过这个调色板来转换像素。如果不对变量mode赋值,该方法将会选择一种模式,在没有调色板的情况下,使得图像和调色板中的所有信息都可以被表示出来。当从一个颜色图像转换为黑白图像时,PIL库使用ITU-R601-2 luma转换公式:

L = R * 299/1000 + G * 587/1000 + B * 114/1000

当转换为2位图像(模式“1”)时,源图像首先被转换为黑白图像。结果数据中大于127的值被设置为白色,其他的设置为黑色;这样图像会出现抖动。如果要使用其他阈值,更改阈值127,可以使用方法point()。为了去掉图像抖动现象,可以使用dither选项。

from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('P')
print(new_im.mode)
new_im.show()

如下,将图像转换为“P”模式。

这里写图片描述
对比原始图像。

这里写图片描述

im.convert(“P”,**options) ⇒ image

这个与第一个方法定义一样,但是当“RGB”图像转换为8位调色板图像时能更好的处理。可供选择的选项为:

Dither=. 控制颜色抖动。默认是FLOYDSTEINBERG,与邻近的像素一起承担错误。不使能该功能,则赋值为NONE。

Palette=. 控制调色板的产生。默认是WEB,这是标准的216色的“web palette”。要使用优化的调色板,则赋值为ADAPTIVE。

Colors=. 当选项palette为ADAPTIVE时,控制用于调色板的颜色数目。默认是最大值,即256种颜色

im.convert(mode,matrix) ⇒ image

使用转换矩阵将一个“RGB”图像转换为“L”或者“RGB”图像。变量matrix为4或者16元组。


from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.mode)
rgb2xyz = (0.412453,0.357580, 0.180423, 0,
           0.212671,0.715160, 0.072169, 0,
           0.019334,0.119193, 0.950227, 0 )
new_im = im.convert("L", rgb2xyz)
print(new_im.mode)
new_im.show()

这里写图片描述
转换后效果

这里写图片描述

Size类

im.size ⇒ (width, height)

图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组(width, height)。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.size) ## 打印出尺寸信息
im.show()

如下图所示为图片的尺寸信息,750*560。

这里写图片描述

Palette类

im.palette ⇒ palette or None

颜色调色板表格。如果图像的模式是“P”,则返回ImagePalette类的实例;否则,将为None。
如下为对非“P”模式下的图像进行palette信息显示。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.palette)

易知,返回值为空,none

这里写图片描述
对图像进行convert操作,转换成“P”模式

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('P')
print(new_im.mode)
print(new_im.palette)

则返回值为ImagePalette类的实例。如下:

评论 66
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值