学习总结自:PIL官方文档

PIL(Python Image Library)是Python的一个图像处理库。

1、简介

PIL库中最重要的类是Image

①从文件中加载Image——open方法

from PIL import Image
im=Image.open('文件路径')

成功后,该函数返回Image对象。

你可以通过一系列Image属性检查该文件的内容:

print(im.format,im.size,im.mode)

如果文件没打开,则会抛出OSError异常。

所以,安全的文件打开方式为:

try:
with Image.open('Test.jpg') as im:
im.show()
except OSError:
pass

②显示Image对象

当我们有了一个Image对象,就可以对其进行一系列的操作和处理,例如,我们通过show方法打开

im.show()

2、一些常用操作

1)读写图像

①从图像文件读取

见第一部分。

PIL支持很多Image文件格式。如果想读取Image文件,就用Image.open()方法。我们不需要关注图像类型,只需要调用该方法就可以,它会自动识别图像文件格式。

如果想将Image对象保存为图像文件,就用Image.save()方法。保存文件时,路径名就变得很重要了。除非已经指定格式(通过第二个参数指定),否则该库会用路径中的扩展名作为存储格式。

②从之前打开的文件中读取

也可以从一个类文件(file-like)对象中打开一幅图像,该对象必须实现了file.read、file.seek、file.tell方法,并以二进制的模式打开了:

from PIL import Image
with open('Test.jpg','rb') as fp:#此时的fp就是file-like对象
im=Image.open(fp)

③从二进制数据中读取

from PIL import Image
import io
im=Image.open(io.BytesIO(buffer))

2)将一个图片文件转化为JPEG格式

读取任意类型的图像文件,并将之保存为JPEG类型

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:
with Image.open(infile) as im:
im.save(outfile)
except OSError:
print('cannot convert',infile)

3)创建JPEG缩略图

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:
with Image.open(infile) as im:
im.thumbnail(size)
im.save(outfile,'JPEG')
except OSError:
print('cannot create thumbnail for',infile)

4)识别某文件夹中图片文件,打印它们的信息

import sys
from PIL import Image for infile in sys.argv[1:]:
try:
with Image.open(infile) as im:
print(infile,im.format,f'{im.size}x{im.mode}')
except OSError:
pass

5)裁剪、粘贴、融合

①从Image中裁剪一小块区域:crop

box=(100,100,400,400)
region=im.crop(box)#提取box所在矩形区域的图像

②处理该小块图像,并粘贴回原图:paste

将该小块图像翻转180°,并粘贴回去

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

粘贴时,region必须和box的尺寸一致。

6)波段分割与融合:split、merge

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

7)几何变换:resize、rotate、transpose

resize:尺寸变形

rotate:顺时针旋转,参数是角度;旋转整幅图像,但是保留原始框架

transpose:旋转,可以将整个框架给旋转了

x,y=im.size
#长宽缩小两倍
new_size=(x/2,y/2)
new_im=im.resize(new_size) #旋转
new_im=im.rotate(45)
new_im=im.transpose(Image.ROTATE_90)

8)颜色变换:convert

Python允许用convert()方法将Image实现色彩模式转化,'L'模式是灰度图像

im=im.convert('L')

9)图像增强

①滤波:Filter

使用模块ImageFilter中的Filter()方法和一些预定义的增强滤波器

im=im.filter(ImageFilter.DETAIIL)

②像素操作:point

point()可以实现对每个像素点的像素值实行修改;

该方法接收一个函数,对每个像素值都用该方法进行处理;

比如下文代码,就是将每个像素值提高为原来的1.2倍:

im=im.point(lambda i: i *1.2)

如果我们同时采用point()与paste()方法,就能实现对图像的选择性修改。

③波段处理:split+point+merge

im_R,im_G,im_B=im.split()
#筛选出R<100的区域,作为蒙版
mask=im_R.point(lambda i:i<100 and 255)
#处理G波段的所有像素值
out=im_G.point(lambda i:i*0.7) #把处理好的G波段用之前的mask进行蒙版处理
#相当于保留r<100部分的G,除去r>100部分的G
im_G.paste(out,None,mask) #波段重建
im=Image.merge(im.mode,(im_R,im_G,im_B))

④一段用于创建mask的语句

imout=im.point(lambda i: expression and 255)
#制作一个符合expression的mask

ImageEnhance模块中有很多图像增强类与方法

⑤对比度:ImageEnhance.Contrast

from PIL import ImageEnhance

enh=ImageEnhance.Contrast(im)
enh.enhance(1.3).show('30% more contrast')

⑥动画

当我们打开一个动画图片(典型的如GIF)后,PIL自动加载第一帧,我们可以用seek和tell方法在不同帧间移动:

from PIL import Image
with Image.open('Test.gif') as im:
im.seek(1)#跳到第一帧 #对第一帧的修改
#....
try:
while(1):
im.seek(im.tell()+1)
#对每一帧的修改
except EOFError:
pass #结束时

当动画访问到最后一帧之后,再用seek,就会抛出EOFError

逐帧处理:ImageSequence.Iterator

from PIL import ImageSequence
for frame in ImageSequence.Iterator(im):
#逐帧处理语句

Python:PIL(一)——简介的更多相关文章

  1. Python生态环境简介[转]

    Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当 ...

  2. Python PIL

    Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...

  3. (转)python生态环境简介

    Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当 ...

  4. Python PIL 库的应用

    PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. PIL库主要有2个方 ...

  5. 基于Python PIL实现简单图片格式转化器

    基于Python PIL实现简单图片格式转化器 目录 基于Python PIL实现简单图片格式转化器 1.简介 2.前期资料准备 2.1.1如何实现图片格式转换? 2.1.2如何保存需要大小的图片? ...

  6. Python,PIL压缩裁剪图片

    自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...

  7. python PIL 图像处理操作

    python PIL 图像处理 # 导入Image库 import Image # 读取图片 im = Image.open("1234.jpg") # 显示图片 im.show( ...

  8. Python PIL模块笔记

    利用python pil 实现给图片上添加文字 图片中添加文字#-*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont ttfo ...

  9. Python 3 mysql 简介安装

    Python 3 mysql 简介安装 一.数据库是什么 1.  什么是数据库(DataBase,简称DB) 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据 ...

  10. python PIL 图像处理

    python PIL 图像处理 This blog is from: https://www.jianshu.com/p/e8d058767dfa Image读出来的是PIL的类型,而skimage. ...

随机推荐

  1. 用python设计猜大小的游戏

    import random def roll_dice(numbers = 3,points = None): print("------摇骰子------") if points ...

  2. 【Vulnhub靶场】EMPIRE: BREAKOUT

    环境准备 下载靶机,导入到vmware里面,这应该不用教了吧 开机可以看到,他已经给出了靶机的IP地址,就不用我们自己去探测了 攻击机IP地址为:192.168.2.15 靶机IP地址为:192.16 ...

  3. DBeaver下载安装与连接MySQL数据库

    一.Dbeaver下载 官网下载地址:Download | DBeaver Community 点击"Windows 64 bit (installer)"即可进行下载. 二.Db ...

  4. 基于Redis&MySQL接口幂等性设计

    基于Redis&MySQL接口幂等性设计 欲把相思说似谁,浅情人不知. 1.幂等 幂等性即多次调用接口或方法不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致. 2.幂等使用场景 前 ...

  5. 合宙AIR105使用Keil MDK + DAP-Link 烧录和调试

    关于AIR105 AIR105是合宙LuatOS生态下的一款芯片, 1月初上市, 开发板与摄像头一起搭售(赠送). 从配置信息看, 芯片性能相当不错: Cortex-M4F内核, 最高频率204Mhz ...

  6. 「NOI十联测」黑暗

    「NOI十联测」黑暗 \(n\) 个点的无向图,每条边都可能存在,一个图的权值是连通块个数的 \(m\) 次方,求所有可能的图的权值和.(n≤30000,m≤15) 令\(ans[n][m]\)为n个 ...

  7. JS 函数提升&变量提升以及函数声明&函数表达式的区别

    感谢原文作者:迟早会有猫 原文链接:https://www.cnblogs.com/SidselLoong/p/10515809.html 今天看js的变量提升问题,里面提到了函数提升.然后发现自己之 ...

  8. 【JS】函数提升变量提升以及函数声明和函数表达式的区别

    今天看js的变量提升问题,里面提到了函数提升.然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错 一.变量提升 console.log(a) var a=100 //undefined ...

  9. bom案例3-放大镜

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. Java线程--CountDownLatch使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11867656.html Java线程--CountDownLatch使用, 代码里头有详细注释 ...