学习笔记19

PIL模块

Pillow核心库可以用于快速访问存储在一些基本像素格式中的数据,这样意味着它可以以数字的方式来处理图片。事实上,在图像识别中经常使用Pillow库的原因是可以通过Pillow某些类对图片进行处理,然后用多维数组表示,进而进行计算。
Pillow库是图像归档和批处理应用程序的理想选择,可以使用该库创建缩略图,对图片格式进行转换、打印图像等。它包含基本的图像处理功能,如点操作、使用一组内置的卷积内核进行过滤及色彩空间转换,还支持图像大小调整、旋转和任意仿射变换等。
总之,它是Python图像处理的通用基础。

1.Image类

1.Format
源文件的文件格式,值为字符串或None(默认值)。对于图片的文件格式,我们都不陌生,如JPG、GIF、PNG等。

    >>>from PIL import Image
    >>>img = Image.open(“./Num13/images/test.png”)
    >>>img.format
    ‘PNG’
2.Format_description
该属性是对图片格式进行描述,值为字符串或None(默认值)。紧接上述代码输入:

    >>>img.format_description
    'Portable network graphics'
上述两个属性属于类属性,接下来我们讲讲实例属性。
3.Mode
图像模式。返回字符串,默认值为空字符串,该值表示图像所使用的像素格式。支持的格式有1、L、P、RGB、RGBA、CMYK等。

    >>>img.mode
    'RGBA'
4.Size
图像的尺寸,按照像素计算。返回值为宽度和高度二元组(width, height),默认值为(0,0)。从源代码可以看出,利用@property装饰器函数把width及height方法“装饰”成属性调用,因此width和height亦为Image类的属性。

    >>>img.size
    (253,453)
    >>>img.width
    253
    >>>img.height
    453
5.Palette
图像的颜色调色板。如果图像的模式是P,就返回ImagePalette类的实例;否则返回None。

    >>>img.palette

    >>>img = Image.open(“./Num13/images/bface.gif”)
    >>>img.mode
    “P”
    >>>img.palette
    <PIL.ImagePalette.ImagePalette at 0x540c400>
6.Info
存储图像相关信息,返回值为字典,默认为{}。文件句柄可以使用该字典传递从文件中读取的各种非图像信息。不同的图像返回字典的键值是不一样的,基于字典中的键非统一标准,大多数方法在返回新的图像时都会忽略这个字典,而且对于一个方法来说,它无法得知自己的操作如何改变这个字典的键值。因此,如果用户需要保存这些信息,就必须在方法open()返回时保存这个字典。

    >>>img.info
    {'background': 0, 'duration': 70, 'transparency': 252, 'version': 'GIF89a'}
    >>>img = Image.open(‘./Num13/images/1.jpg’)
    >>>img.info
    {'jfif': 257, 'jfif_density': (1, 1), 'jfif_unit': 0, 'jfif_version': (1, 1)}
除了上面讲的几个实例属性,还有im、category、readonly、pyaccess等属性,因为不常用,这里不做详细介绍。
Image还有其他属性,比如通过@property装饰器函数“装饰”特殊方法而成的特殊属性。

1.New
使用给定的变量mode、size创建新图像,包含的参数有mode、size、color。mode表示新图像使用的模式,如P。size是以像素形式给定的宽/高二元组。color表示什么颜色用于图像,默认值为0,表示黑色。如果给出的话,这个值应该是单波段模式的单个整数或浮点值,以及多通道模式的元组(每个通道一个值)。在版本1.1.4及其之后,用户创建RGB图像时,还可以使用ImageColor模块支持的颜色字符串,比如设变量color赋值为red。如果颜色为无,则图像不会被初始化,这对向该图像复制或绘制某些内容是有用的。new函数返回的是一个Image对象。

    def new(mode, size, color=0):
         pass
比如创建一个256×256大小的图像:

    >>>from PIL import Image
    >>>im = Image.new('RGB', (256,256))
    >>>im.show()
因color取默认值0,故该图像为黑色。如果要创建一个同尺寸的蓝色图像,就需要修改颜色值:

    >>>im = Image.new('RGB', (256,256),''#0000ff'')

    >>>im.show()

>>>im = Image.new('RGB', (256,256),''blue'')
    >>>im.show()

2.Open
该函数用来打开并识别给定的图像文件,而且只标识文件头,使文件保持打开状态,直到你尝试处理数据(或调用load()方法)时才会从文件中读取实际的图像数据。

    def open(fp, mode='r'):
         pass
fp为文件名(字符串)、pathlib.Path对象或文件对象。文件对象必须实现read()、seek()和tell()方法并以二进制模式打开。 mode表示模式,如果给出,这个值必须是'r'。返回Image对象。

    >>>from PIL import Image
    >>>im = Image.open('./Num13/images/test.jpg')
    >>>im.show()
    >>>im1= Image.open('./Num13/images/test.jpg','r')
    >>>im1.show()
3.Alpha_composite
该函数对图像进行Alpha复合,有im1和im2两个参数,分别表示两张图像,必须是RGBA模式,且im2必须与im1图像大小相同。返回Image对象。

    def alpha_composite(im1, im2):
         pass
事实是im2覆盖了im1,示例如下:

    >>> from PIL import Image
    >>>im1 = Image.new('RGBA', (256,256), '#0000ff')

    >>>im2 =Image.new('RGBA',(256,256), '#ff0000')

    >>>alpha_im = Image.alpha_composite(im1, im2)
    >>>alpha_im.show()
从返回的效果发现im1与im2一样。如果im2的大小或模式与im1不一样,就会报“ValueError:images do not match”错误。
4.blend
blend函数使用给定的两张图像及透明度变量Alpha进行插值并生成一张新图像。

    def blend(im1, im2, alpha):
         pass
im1表示首张图像,im2表示与im1同尺寸和模式的图像,否则会报错。其合成公式为out =image1 *(1.0 - alpha) + image2 * alpha。alphpa为插值alpha因子。如果alpha为0.0,就返回第一个图像的副本。如果alpha为1.0,就返回第二个图像的副本。Alpha值没有限制,如有必要,结果将被剪裁以适合允许的输出范围。

    >>>from PIL import Image
    >>> im1 =Image.open("./Num13/images/scence1.jpg")
    >>> im2 =Image.open("./Num13/images/scence2.jpg ")
    >>> im =Image.blend(im1, im2, 0.35)
    >>> im.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值