b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

quilt?view?Python图像处理库:Pillow 初级教程

电脑杂谈  发布时间:2016-09-03 00:04:10  来源:网络整理

你是否正在寻找关于pillow的内容?让我把最直接的东西奉献给你:

Python图像处理库:pillow 初级教程

2014-09-14 翻译

pillow由PIL而来,所以该导入该库使用import PIL

本文相关的代码:https://github.com/445141126/pillow_example

Image类

pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。

使用Image模块中的open函数打开一张图片:

>>> from PIL import Image >>> im = Image.open("lena.ppm")

如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容

>>> from __future__ import print_function >>> print(im.format, im.size, im.mode) PPM (512, 512) RGB

format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。

如果文件不能打开,则抛出IOError异常。

当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片:

>>> im.show()

ps:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用xv进行显示。如果没有安装xv,该函数甚至不能工作。但是该方法非常便于debug和test。(windows中应该调用默认图片查看器打开)

读写图片

Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,pillow库自动根据文件决定格式。

Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。

图片转成jpg格式

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函数的第二个参数可以用来指定图片格式,如果文件名中没有给出一个标准的图像格式,那么第二个参数是必须的。

创建缩略图

from __future__ import print_function import os, sys from PIL import Image size = (128, 128) for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + ".thumbnail" if infile != outfile: try: im = Image.open(infile) im.thumbnail(size) im.save(outfile, "JPEG") except IOError: print("cannot create thumbnail for", infile)

必须指出的是除非必须,Pillow不会解码或raster数据。当你打开一个文件,pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。

这意味着打开文件非常快,与文件大小和压缩格式无关。下面的程序用来快速确定图片属性:

确定图片属性

from __future__ import print_function import sys from PIL import Image for infile in sys.argv[1:]: try: with Image.open(infile) as im: print(infile, im.format, "%dx%d" % im.size, im.mode) except IOError: pass

裁剪、粘贴、与合并图片

Image类包含还多操作图片区域的方法。如crop()方法可以从图片中提取一个子矩形

从图片中复制子图像

box = im.copy() #直接复制图像 box = (100, 100, 400, 400) region = im.crop(box)

区域由4-tuple决定,该tuple中信息为(left, upper, right, lower),。 pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点,所以上例中截取的图片大小为300*300像素^2。

处理子图,粘贴回原图

region = region.transpose(Image.ROTATE_180) im.paste(region, box)

将子图paste回原图时,子图的region必须和给定box的region吻合。该region不能超过原图。而原图和region的mode不需要匹配,pillow会自动处理。

另一个例子

Rolling an image

def roll(image, delta): "Roll an image sideways" image = image.copy() #复制图像 xsize, ysize = image.size delta = delta % xsize if delta == 0: return image part1 = image.crop((0, 0, delta, ysize)) part2 = image.crop((delta, 0, xsize, ysize)) image.paste(part2, (0, 0, xsize-delta, ysize)) image.paste(part1, (xsize-delta, 0, xsize, ysize)) return image

分离和合并通道

r, g, b = im.split() im = Image.merge("RGB", (b, g, r))

对于单通道图片,split()返回图像本身。为了处理单通道图片,必须先将图片转成RGB。

几何变换

Image类有resize()、rotate()和transpose()、transform()方法进行几何变换。

简单几何变换

out = im.resize((128, 128)) out = im.rotate(45) # 顺时针角度表示


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-15774-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 夏洛蒂
      夏洛蒂

      望严查

    • 刘旭
      刘旭

      在水下布监测系统是真的

    • 中西妙子
      中西妙子

      可以借此立即宣布南海防空识别区

    热点图片
    拼命载入中...