学习总结自: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. kubernetes sticky session 配置

    kubernetes中经常需要配置sticky session,此时需要根据你使用的ingress controller来设置了. 1.Nginx Ingress apiVersion: extens ...

  2. 右键没有word?excel?ppt?注解表该改改啦

    ✿[office 2019]office2010版本以上的都可以(例如:office 2010.office 2016.office 2019) 一.快速方法解决右键没有word: 在电脑桌面右键一个 ...

  3. http协议和https协议的区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  4. STS中创建 javaweb 项目?

    package com.aaa.readme; /* * 一. * 1.安装Tomcat 版本8.5 * * 2.file---->new------>dynamic java web p ...

  5. AT2650 [ARC077C] guruguru

    可以发现,如果我们枚举每个理想亮度 \(X\) 然后再求在这个理想亮度情况下的答案是非常难维护的. 不妨反过来,考虑每个位置 \(i, i + 1\) 之间对每个理想亮度 \(X\) 减少次数的贡献. ...

  6. python编写购物车新写法

    用另一种方式完成购物车的功能实现 #!/usr/bin/python zijin = input("请输入资金:") if zijin.isdigit(): zijin = int ...

  7. 连接docker里面的mysql失败解决

    场景:在虚拟机的docker容器中安装latest版本的mysql之后,在宿主机中使用navicat连接虚拟机中的mysql出现下图报错: 解决方法: 1.首先docker ps命令查看正在运行的容器 ...

  8. oracle修改密码、添加用户及授权

    解锁某个用户 sqlplus/as sysdba; alter user scott account unlock; 忘记密码处理 登录:sqlplus/as sysdba;修改:alter user ...

  9. docker 网络概述及网络模式详解

    docker 网络概述及网络模式详解 1.网络概述 2.网络模式详解 1.网络概述: Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0) ...

  10. ELK 日志分析系统概述及部署

    ELK 日志分析系统概述及部署 1.ELK概述: ELK简介 : ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch.Logstash 和 Kiabana 三个开源工具配合使用 ...