PIL库图像处理
Posted guyuanlin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIL库图像处理相关的知识,希望对你有一定的参考价值。
Python Imaging Library,简称PIL, 是 Python语言 中常用的图像处理库,需要通过pip工具安装:pip install pillow。PIL库支持图像存储、显示和处理,能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。
PIL包含21个与图片相关的类,这里只介绍Image类,Image类是PIL最重要的类,他代表一张图片,用以下方法引入:
>>> from PIL import Image
方法 | 描述 |
Image.open(filename) | 根据参数加载文件 |
Image.new(mode,size,color) | 根据给定参数创建一个新图像 |
Image.open(StringIO.StringIO(buffer)) | 从字符串中获取图像 |
Image.frombytes(mode,size,data) | 根据像素点data创建图像 |
Image.verify() | 对图像文件完整性进行检查,返回异常 |
>>> im = Image.open("hopper.ppm")
如果成功,则此函数返回一个Image
对象。
Image类有4个处理图片的常用属性,如下
属性 | 描述 |
Image.format | 标识图像格式或来源,如果图像不是从文件获取,值为None |
Image.mode | 图像的色彩模式,"L"为灰度图像、"RGB"为真彩色图像、"CMYK"为出版图像 |
Image.size | 图像宽度和高度,单位是像素(px),返回值是二元元组(tuple) |
Image.palette | 调色板属性,返回一个ImagePalette类型 |
可以查看文件属性:
>>> print(im.format, im.size, im.mode) PPM (512, 512) RGB
该format
属性标识图像的来源。如果未从文件中读取图像,则将其设置为“无”。size属性是一个包含宽度和高度(以像素为单位)的2元组。该 mode
属性定义图像中波段的数量和名称,以及像素类型和深度。常见模式是灰度图像的“L”(亮度),真彩色图像的“RGB”和印前图像的“CMYK”。
如果无法打开该文件,IOError
则会引发异常。
获得Image
类的实例后,可以使用此类定义的方法来处理和操作图像。例如,让我们显示刚刚加载的图像:
>>> im.show()
Python Imaging Library支持各种图像文件格式。要从磁盘读取文件,使用模块中的open()
功能Image
。无需知道打开文件的文件格式。库根据文件内容自动确定格式。
要保存文件,使用该类的save()
方法 Image
。保存文件时,名称变得很重要。除非指定格式,否则库使用文件扩展名来发现要使用的文件存储格式。
from __future__ import print_function import os, sys from PIL import Image for infile in sys.argv[1:]: f, e = os.path.splitext(infile) outfile = f + ".jpg" if infile != outfile: try: Image.open(infile).save(outfile) except IOError: print("cannot convert", infile)
上述save函数还可指定保存格式,例如:
>>>im.save(outfile,"JPEG")
使用thumbnail(size,resample)(创建缩略图)创建一个指定大小(size)的缩略图,需要注意的是,thumbnail方法是原地操作,返回值是None。
第一个参数是指定的缩略图的大小,第二个是采样的,有Image.BICUBIC
,PIL.Image.LANCZOS
,PIL.Image.BILINEAR
,PIL.Image.NEAREST
这四种采样方法。默认是Image.BICUBIC。
>>> im.thumbnail((50,50),resample=Image.BICUBIC)
>>> im.show()
图像过滤
Pillow使用ImageFilter可以简单做到图像的模糊、边缘增强、锐利、平滑等常见操作。
from PIL import Image, ImageFilter im = Image.open(im_path) # 高斯模糊 im.filter(ImageFilter.GaussianBlur).save(r‘D:gzt.jpg‘) # 普通模糊 im.filter(ImageFilter.BLUR).saver‘D:gzt.jpg‘) # 边缘增强 im.filter(ImageFilter.EDGE_ENHANCE).save(r‘D:gzt.jpg‘) # 找到边缘 im.filter(ImageFilter.FIND_EDGES).save(r‘D:gzt.jpg‘) # 浮雕 im.filter(ImageFilter.EMBOSS).save(r‘D:gzt.jpg‘) # 轮廓 im.filter(ImageFilter.CONTOUR).save(r‘D:gzt.jpg‘) # 锐化 im.filter(ImageFilter.SHARPEN).save(r‘D:gzt.jpg‘) # 平滑 im.filter(ImageFilter.SMOOTH).save(r‘D:gzt.jpg‘) # 细节 im.filter(ImageFilter.DETAIL).save(r‘D:gzt.jpg‘)
以下示例高斯模糊
>>>im.filter(ImageFilter.GaussianBlur).save(r‘D:gzt.jpg‘) >>>im.show()
以上是关于PIL库图像处理的主要内容,如果未能解决你的问题,请参考以下文章