您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 造纸印刷 > python图像处理库PIL介绍
python图像处理库PIL介绍1.简介。图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的Python当然不会错过这一门盛宴。PIL(PythonImagingLibrary)是Python中最常用的图像处理库,目前版本为1.1.7,我们可以在这里下载学习和查找资料。Image类是PIL库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。2.使用。导入Image模块。然后通过Image类中的open方法即可载入一个图像文件。如果载入文件失败,则会引起一个IOError;若无返回错误,则open函数返回一个Image对象。现在,我们可以通过一些对象属性来检查文件内容,即:1importImage2im=Image.open(j.jpg)3printim.format,im.size,im.mode4JPEG(440,330)RGB这里有三个属性,我们逐一了解。format:识别图像的源格式,如果该文件不是从文件中读取的,则被置为None值。size:返回的一个元组,有两个元素,其值为象素意义上的宽和高。mode:RGB(truecolorimage),此外还有,L(luminance),CMTK(pre-pressimage)。现在,我们可以使用一些在Image类中定义的方法来操作已读取的图像实例。比如,显示最新载入的图像:1im.show()2输出原图:3.函数概貌。3.1ReadingandWritingImages:open(infilename),save(outfilename)3.2CuttingandPastingandMergingImages:crop():从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left,upper,right,lower),坐标系统的原点(0,0)是左上角。paste():merge():1box=(100,100,200,200)2region=im.crop(box)3region.show()4region=region.transpose(Image.ROTATE_180)5region.show()6im.paste(region,box)7im.show()其效果图为:旋转一幅图片:1defroll(image,delta):2Rollanimagesideways34xsize,ysize=image.size56delta=delta%xsize7ifdelta==0:returnimage89part1=image.crop((0,0,delta,ysize))10part2=image.crop((delta,0,xsize,ysize))11image.paste(part2,(0,0,xsize-delta,ysize))12image.paste(part1,(xsize-delta,0,xsize,ysize))1314returnimage3.3几何变换。3.3.1简单的几何变换。1out=im.resize((128,128))#2out=im.rotate(45)#逆时针旋转45度角。3out=im.transpose(Image.FLIP_LEFT_RIGHT)#左右对换。4out=im.transpose(Image.FLIP_TOP_BOTTOM)#上下对换。5out=im.transpose(Image.ROTATE_90)#旋转90度角。6out=im.transpose(Image.ROTATE_180)#旋转180度角。7out=im.transpose(Image.ROTATE_270)#旋转270度角。各个调整之后的图像为:图片1:图片2:图片3:图片4:3.3.2色彩空间变换。convert():该函数可以用来将图像转换为不同色彩模式。3.3.3图像增强。Filters:在ImageFilter模块中可以使用filter函数来使用模块中一系列预定义的增强滤镜。1importImageFilter2imfilter=im.filter(ImageFilter.DETAIL)3imfilter.show()3.4序列图像。即我们常见到的动态图,最常见的后缀为.gif,另外还有FLI/FLC。PIL库对这种动画格式图也提供了一些基本的支持。当我们打开这类图像文件时,PIL自动载入图像的第一帧。我们可以使用seek和tell方法在各帧之间移动。1importImage2im.seek(1)#skiptothesecondframe34try:5while1:6im.seek(im.tell()+1)7#dosomethingtoim8exceptEOFError:9pass3.5更多关于图像文件的读取。最基本的方式:im=Image.open(filename)类文件读取:fp=open(filename,rb);im=Image.open(fp)字符串数据读取:importStringIO;im=Image.open(StringIO.StringIO(buffer))从归档文件读取:importTarIO;fp=TarIo.TarIO(Image.tar,Image/test/lena.ppm);im=Image.open(fp)基本的PIL目前就练习到这里。其他函数的功能可点击这里进一步阅读。关于PIL库的一些概念pil能处理的图片类型pil可以处理光栅图片(像素数据组成的的块)。通道一个图片可以包含一到多个数据通道,如果这些通道具有相同的维数和深度,Pil允许将这些通道进行叠加模式11位像素,黑和白,存成8位的像素L8位像素,黑白P8位像素,使用调色板映射到任何其他模式RGB3×8位像素,真彩RGBA4×8位像素,真彩+透明通道CMYK4×8位像素,颜色隔离YCbCr3×8位像素,彩色视频格式I32位整型像素F32位浮点型像素尺寸通过图片对象的size属性可以得到图片的尺寸,结果这是一个二元组,包含水平和垂直方向上的像素数。坐标Pil采取左上角为(0,0)的坐标系统调色板mode(P)为每个像素定义具体的颜色值图片信息可以通过info属性读取一张图片的附加信息,这个与图片的格式有关。滤镜在对图片的几何操作中可能会将多个输入像素映射到单个的输出像素,pil提供4种不同的采样滤镜(在目前的版本中,后续的版本可能支持更多)NEAREST最近BILINEAR双线型BICUBIC双三次插值ANTIALIAS平滑在RGB模式下,每个图片由三个通道叠加而成,每个模式下为一个灰度图,当有一个调色板来调色的时候,这三张灰度图的叠加即可合成3*8位(每个像素)的一个真彩图片。pil库中,图片之间的模式(mode)可以转化。下面给出一些简单的例子,例子中的所有图片均来自于国家地理的官网,为了使得文档比较短小,每个图片均使用Pil缩放成1/2大小,如有侵权嫌疑,请尽快联系,我会删除这些图片。Python图像处理类库本章讲解操作和处理图像的基础知识,将通过大量示例介绍处理图像所需的Python工具包,并介绍用于读取图像、图像转换和缩放、计算导数、画图和保存结果等的基本工具。这些工具的使用将贯穿本书的剩余章节。1.1PIL:Python图像处理类库PIL(PythonImagingLibraryPython,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。PIL是免费的,可以从下载。利用PIL中的函数,我们可以从大多数图像格式的文件中读取数据,然后写入最常见的图像格式文件中。PIL中最重要的模块为Image。要读取一幅图像,可以使用:fromPILimportImagepil_im=Image.open(‘empire.jpg‘)上述代码的返回值pil_im是一个PIL图像对象。图像的颜色转换可以使用convert()方法来实现。要读取一幅图像,并将其转换成灰度图像,只需要加上convert(‘L‘),如下所示:pil_im=Image.open(‘empire.jpg‘).convert(‘L‘)在PIL文档中有一些例子,参见。这些例子的输出结果如图1-1所示。图1-1:用PIL处理图像的例子1.1.1转换图像格式通过save()方法,PIL可以将图像保存成多种格式的文件。下面的例子从文件名列表(filelist)中读取所有的图像文件,并转换成JPEG格式:fromPILimportImageimportosforinfileinfilelist:outfile=os.path.splitext(infile)[0]+.jpgifinfile!=outfile:try:Image.open(infile).save(outfile)exceptIOError:printcannotconvert,infilePIL的open()函数用于创建PIL图像对象,save()方法用于保存图像到具有指定文件名的文件。除了后缀变为“.jpg”,上述代码的新文件名和原文件名相同。PIL是个足够智能的类库,可以根据文件扩展名来判定图像的格式。PIL函数会进行简单的检查,如果文件不是JPEG格式,会自动将其转换成JPEG格式;如果转换失败,它会在控制台输出一条报告失败的消息。本书会处理大量图像列表。下面将创建一个包含文件夹中所有图像文件的文件名列表。首先新建一个文件,命名为imtools.py,来存储一些经常使用的图像操作,然后将下面的函数添加进去:importosdefget_imlist(path):返回目录中所有JPG图像的文件名列表return[os.path.join(path,f)forfinos.listdir(path)iff.endswith(‘.jpg‘)]现在,回到PIL。1.1.2创建缩略图使用PIL可以很方便地创建图像的缩略图。thumbnail()方法接受一个元组参数(该参数指定生成缩略图的大小),然后将图像转换成符合元组参数指定大小的缩略图。例如,创建最长边为128像素的缩略图,可以使用下列命令:pil_im.thumbnail((128,128))1.1.3复制和粘贴图像区域使用crop()方法可以从一幅图像中裁剪指定区域:box=(100,100,400,400)region=pil_im.crop(box)该区域使用四元组来指定。四元组的坐标依次是(左,上,右,下)。PIL中指定坐标系的左上角坐标为(0,0)。我们可以旋转上面代码中获取的区域,然后使用paste()方法将该区域放回去,具体实现如下:region=region.transpose(Image.ROTATE_180)pil_im.paste(region,box)1.1.4调整尺寸和旋转要调整一幅图像的尺寸,我们可以调用resize()方法。该方法的参数是一个元组,用来指定新图像的大小:out=pil_im.resize((128,128))要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后调用rotate()方法:out=pil_im.rotate(45)上述例子的输出结果如图1-1所示。最左端是原始图像,然后是灰度图像、粘贴有旋转后裁剪图像的原始图像,最后是缩略图。1.2Matplotlib我们处理数学运算、绘制图表,或者在图像上绘制点、直线和曲线时,Matplotlib是个很好的类库,具有比PIL更强大的绘图功能。Matplotlib可以绘制出高质量的图表,就像本书中的许
本文标题:python图像处理库PIL介绍
链接地址:https://www.777doc.com/doc-2659552 .html