Pillow教程(一)
传统的PIL库不支持python3,所以使用从PIL派生出来的Pillow库。
Image类
Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。
使用Image模块中的open函数打开一张图片:
from PIL import Imageim = Image.open('1.gif')
print(im)
print(im.format,im.size,im.mode)
如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容
<PIL.GifImagePlugin.GifImageFile image mode=P size=170x288 at 0x567748>
GIF (170, 288) P
- format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;
- size属性是一个tuple,表示图像的宽和高(单位为像素);
- mode属性为表示图像的模式.
模式属性如下:
1 | 1位像素,黑和白,存成8位的像素 |
L | 8位像素,黑白 |
P | 8位像素,使用调色板映射到任何其他模式 |
RGB | 3×8位像素,真彩 |
RGBA | 4×8位像素,真彩+透明通道 |
CMYK | 4×8位像素,颜色隔离 |
YCbCr | 3×8位像素,彩色视频格式 |
I | 32位整型像素 |
F | 32位浮点型像素 |
当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片。
im.show()
PS:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用查看器进行显示。
读写图片
Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。
Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。
im = Image.open('1.gif')
im.save('f.BMP')
通常,save用以保存一个临时的image对象到硬盘。而转换工作由一个功能更为强大的convert()方法来完成。
拷贝,粘贴,合并图片
from PIL import Imageim = Image.open('tu.jpg')
#设置要拷贝的区域
box = (100, 100, 500, 500)# 将im表示的图片对象拷贝到region中,大小为(400*400)像素。
# 这个region可以用来后续的操作(region其实就是一个Image对象),
# box变量是一个四元组(左,上,右,下)。
region = im.crop(box)# 从字面上就可以看出,先把region中的Image反转180度,然后再放回到region中。
region = region.transpose(Image.ROTATE_90)
#粘贴box大小的region到原先的图片对象中。
im.paste(region, box)
im.save('1.jpg')
区域由4-tuple决定,该tuple中信息为(left, upper, right, lower),Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点。
上面示例粘贴后的图片是临时性,需要save保存成新图片。
box = im.copy() #直接复制图像
分离和合并通道
每一个RGB都是由三个通道的灰度图叠加的,所以pil提供了将这三个通道分离的方法.
对于单通道图片,split()返回图像本身。为了处理单通道图片,必须先将图片转成RGB。
r,g,b = im.split()#分割成三个通道
im = Image.merge("RGB", (b, g, r)) #将b,r两个通道进行翻转。
im.save('rgb.jpg')
几何转变
Image类有resize()、rotate()和transpose()、transform()方法进行几何变换,用以重定义图片大小,对图片进行旋转等操作。
简单几何变换:
out = im.resize( ( 128,128))
out = im.rotate(45)
置换图像:
# 左右翻转
out = im.transpose(Image.FLIP_LEFT_RIGHT)
# 上下反向
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
transpose()和象的rotate()没有性能差别。
模式转换
# 黑白
am = im.convert('L')
am.show()
图像增强
1.滤镜
ImageFilter模块提供了很多预定义的图片加强滤镜。
比如一个常用的滤镜,细节(detail滤镜)
from PIL import ImageFilter im = Image.open('tu.jpg')
out = im.filter(ImageFilter.DETAIL)
2.直接操作像素点
可以对每个像素点进行操作,而且,每一个通道都可以独立的进行操作。比如,将每个像素点的亮度(不知道有没有更专业的词)增大20%
#注意这里用到一个匿名函数(那个可以把i的1.2倍返回的函数)
out = im.point(lambda i : i * 1.2)
3.读写图片的更多方式
通常,我们使用open方法进行图片的打开操作。但是这不是唯一的方式。完全可以跟python的IO整合起来。
fp = open("tu.jpg", "rb")
im = Image.open(fp)
附件:原图
Pillow教程(一)相关推荐
- python3里的pillow怎么安装_“python安装pillow教程“python3.4怎么安装pil
"python安装pillow教程"python3.4怎么安装pil python安装pillow教程2020-10-09 03:37:02人已围观 如何在python3.6中装p ...
- python表格单元格批注批量插图xlwings\os\pillow教程,手把手代码讲解
1.常规操作import python设置--项目--python解释器--增加软件包Pillow\xlwings from PIL import Image import os import xlw ...
- JavaTPoint Python 中文教程【翻译完成】
原文:JavaTPoint 协议:CC BY-NC-SA 4.0 阶段:机翻(1) 危机只有发展到最困难的阶段,才有可能倒逼出有效的解决方案.--<两次全球大危机的比较研究> 在线阅读 在 ...
- ZetCode Python 教程
来源:ApacheCN ZetCode 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request. 请您勇敢地去翻译和改进翻译.虽然 ...
- python 百度识图_python截图+百度ocr(图片识别)+ 百度翻译
python截图+百度ocr(图片识别)+ 百度翻译 一直想用python做一个截图并自动翻译的工具,恰好最近有时间就在网上找了资料,根据资料以及自己的理解做了一个简单的截图翻译工具.整理一下并把代码 ...
- python找色_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...
- pillow是python的图像处理标准库_Python图像处理库:Pillow 初级教程
Python图像处理库:Pillow 初级教程. Image类 Pillow中最重要的类就是Image,该类存在于同名的模块中.可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接 ...
- python图色模拟脚本_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色搜索功能思路: 抓取当前屏幕快 ...
- python 找色点击_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...
- python写gui导入图片并处理_Python图像处理库:Pillow 初级教程
Image类 Pillow中最重要的类就是Image,该类存在于同名的模块中.可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片. 使用Image模块中的open函数 ...
最新文章
- altium designer显示Analyzing GND,变得很卡
- 密码学-hash散列表
- 蓝桥杯-逆序对(java)
- onnx模型部署 python_onnxruntime模型部署流程
- datetime建立索引有用吗_超全的数据库建表、SQL、索引规范
- uC/OS-II OS_TASK.C中有关任务管理的函数
- 三大场景,对象存储OSS带你快速上云
- 微信能远程控制电脑吗_神器分享:用微信就能远程控制电脑,这款神器有些厉害...
- track_info分区表的创建并将ETL的数据加载到Hive表
- java面向对象的多态_java面向对象(五)之多态
- Sharepoint 2013默认dll部署位置
- ZOJ 3204 Connect them 继续MST
- java io读取文件_java io读取文件操作代码实例
- SQOOP——MySQL 和 HDFS 的桥梁
- 适时突破[我眼中的戴尔转型]
- shenyu2.5.0对restful的path中文不支持,400错误解决
- fremaker遍历list_Freemarker中如何遍历List
- 关系图 antv G6
- 系统大作业. 多酶级联反应酶配比及投料优化(1)
- 10000小时后,我从外包走进了字节跳动