Python:PIL(一)——简介
学习总结自: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(一)——简介的更多相关文章
- Python生态环境简介[转]
Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy 原译: Python生态环境简介 当 ...
- Python PIL
Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...
- (转)python生态环境简介
Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy 原译: Python生态环境简介 当 ...
- Python PIL 库的应用
PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. PIL库主要有2个方 ...
- 基于Python PIL实现简单图片格式转化器
基于Python PIL实现简单图片格式转化器 目录 基于Python PIL实现简单图片格式转化器 1.简介 2.前期资料准备 2.1.1如何实现图片格式转换? 2.1.2如何保存需要大小的图片? ...
- Python,PIL压缩裁剪图片
自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...
- python PIL 图像处理操作
python PIL 图像处理 # 导入Image库 import Image # 读取图片 im = Image.open("1234.jpg") # 显示图片 im.show( ...
- Python PIL模块笔记
利用python pil 实现给图片上添加文字 图片中添加文字#-*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont ttfo ...
- Python 3 mysql 简介安装
Python 3 mysql 简介安装 一.数据库是什么 1. 什么是数据库(DataBase,简称DB) 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据 ...
- python PIL 图像处理
python PIL 图像处理 This blog is from: https://www.jianshu.com/p/e8d058767dfa Image读出来的是PIL的类型,而skimage. ...
随机推荐
- kubernetes之Pod水平自动伸缩(HPA)
https://k8smeetup.github.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ Horizon ...
- Jquery Validate 使用记坑
在使用jquery validate 的时候 使用的有remote 需要在页面初始化的时候调用, 这样在文本框输入完的时候就会调用远程方法验证,否则,在最后表单验证的时候会忽悠remote的返回值验证 ...
- 微服务架构 | 10.2 使用 Papertrail 实现日志聚合
目录 前言 1. Papertrail 基础知识 1.1 Papertrail 特点 1.2 Papertrail 是什么 2. 使用 Papertrail 进行日志聚合的示例 2.1 创建 Pape ...
- ApacheCN JavaScript 译文集 20211122 更新
JavaScript 编程精解 中文第三版 零.前言 一.值,类型和运算符 二.程序结构 三.函数 四.数据结构:对象和数组 五.高阶函数 六.对象的秘密 七.项目:机器人 八.Bug 和错误 九.正 ...
- Java--这张线程瓜图保熟,不进来看看?这瓜要是不熟它就Dead掉了
先来看一下线程这张图线程的几种运行状态之间运行流程: 看不懂没关系,慢慢来学习,往下学习来继续了解一下~ 什么是线程? 线程是进程的一部分,是程序执行中的一条执行路线: 进程就是指程序在其自身地址空间 ...
- js中数组的添加和移除
1.引入js文件 <script src="../plugins/jQuery/jquery-2.2.3.min.js"></script>2.HTML中代 ...
- Cell的重用原理
iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存.要解决该问题,需要重用UITableViewC ...
- Category注意事项
1.分类的使用注意事项 分类只能增加方法, 不能增加成员变量 @interface Person (NJ) { // 错误写法 // int _age; } - (void)eat; @end 分类中 ...
- LeetCode随缘刷题之盛最多水的容器
package leetcode.day_01_30; /** * 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) .在坐标内画 n 条垂直线,垂直线 i的两个端 ...
- Linux vi 命令 – 文本编辑器
vi命令是linux系统字符界面下的最常用的文本编辑器. vi编辑器是所有linux的标准编辑器,用于编辑任何ASCⅡ文本,对于编辑源程序尤其有用.iv编辑器功能非常强大,可以对文本进行创建,查找,替 ...