Python PIL库图像处理操作详解(3)

下面是一个结合了point函数,split函数,paste函数以及merge函数的小例子。

>>> source = im.split() >>> R,G,B = 0,1,2 >>> mask = source[R].point(lambda x: x<100 and 255) >>> # x<100,return 255,otherwise return 0 >>> out_G = source[G].point(lambda x:x*0.7) >>> # 将out_G粘贴回来,但是只保留'R'通道像素值<100的部分 >>> source[G].paste(out_G,None,mask) >>> # 合并成新的图像 >>> im_new = Image.merge(im.mode,source) >>> im_new.show() >>> im.show()

ImageEnhance()(图像增强)

>>> from PIL import ImageEnhance >>> brightness = ImageEnhanBce.Brightness(im) >>> im_brightness = brightness.enhance(1.5) >>> im_brightness.show() >>> im_contrast = ImageEnhance.Contrast(im) >>> im_contrast.enhance(1.5) <PIL.Image.Image image mode=RGB size=296x299 at 0x7F62AE271AC8> >>> im_contrast.enhance(1.5).show()

ImageEnhance是PIL下的一个子类,主要用于图像增强,比如增加亮度(Brightness),增加对比度(Contrast)等。上面的代码将原来图像的亮度增加50%,将对比度也增加了50%。

ImageSequence()(处理图像序列)
下面的代码可以遍历gif图像中的所有帧,并分别保存为图像

>>> from PIL import ImageSequence >>> from PIL import Image >>> gif = Image.open("pipixia.gif") >>> for i,frame in enumerate(ImageSequence.Iterator(gif),1): ... if frame.mode == 'JPEG': ... frame.save("%d.jpg" %i) ... else: ... frame.save("%d.png" % i)

除了上面使用迭代器的方式以外,还可以一帧一帧读取gif,比如下面的代码:

>>> index = 0 >>> while 1: ... try: ... gif.seek(index) ... gif.save("%d.%s" %(index,'jpg' if gif.mode == 'JPEG' else 'png')) ... index += 1 ... except EOFError: ... print("Reach the end of gif sequence!") ... break

上面的代码在读取到gif的最后一帧之后,会throw 一个 EOFError,所以我们只要捕获这个异常就可以了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/788daf31a8c4238e801068797e047c8b.html