Pillow图像处理库安装及使用


Posted in Python onApril 12, 2022

一、安装

  • 被认为是python官方图像处理库
  • PIL非常适合于图像归档以及图像的批处理任务。可以使用PIL创建缩略图,转换图像格式,打印图像等等
  • PIL支持众多的GUI框架接口,可以用于图像展示
  • PIL库同样支持图像的大小转换,图像旋转,以及任意的仿射变换
pip install Pillow

二、打开图片

from PIL import Image

im = Image.open("picture.jpg")
im.show()

三、转换格式并保存

from PIL import Image

im = Image.open("picture.jpg")
im.save("result.png")

四、创建缩略图

from PIL import Image

im = Image.open("picture.jpg")
im.thumbnail((128, 128))
im.save("result.jpg")

五、获取图片属性

  • 获取图像的来源,如果图像不是从文件读取它的值就是None。
from PIL import Image

im = Image.open("picture.jpg")
print(im.format)

六、图片信息

from PIL import Image

im = Image.open("picture.jpg")
print(im.info)

七、调色板

  • 如果图像的模式是“P”,则返回Image  Palette类的实例;否则,将为None
from PIL import Image

im = Image.open("picture.jpg")
print(im.palette)

八、画板

  • 使用给定的变量mode和size生成画板
from PIL import Image

im= Image.new("RGB", (128, 128), "#FF0000")
im.show()

九、图片模式

  • 图像的模式,常见如下
  • L:8位像素,黑白
  • P:9位像素,使用调色板映射到任何其他模式
  • 1:1位像素,黑白图像,存成8位像素
  • RGB:3*8位像素,真彩
  • RGBA:4*8位像素,真彩+透明通道
  • CMYK:4*8位像素,印刷四色模式或彩色印刷模式
  • YCbCr:3*8位像素,色彩视频格式
  • I:32位整型像素
  • F:33位浮点型像素
from PIL import Image

im = Image.open("picture.jpg")
print(im.mode)

十、模式转换

  • 将当前图像转换为其他模式,并且返回新的图像
from PIL import Image

im = Image.open("picture.jpg")
new_im = im.convert('L')
print(new_im.mode)
new_im.show()

十一、矩阵模式转换

  • 使用转换矩阵将一个“RGB”图像转换为“L”或者“RGB”图像
from PIL import Image

im = Image.open("picture.jpg")
print(im.mode)
matrix = (0.412453,0.357580, 0.180423, 0,
0.212671,0.715160, 0.072169, 0,
0.019334,0.119193, 0.950227, 0 )
new_im = im.convert("L", matrix)
print(new_im.mode)
new_im.show()

十二、图片尺寸

  • 获取图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组
from PIL import Image

im = Image.open("picture.jpg")
print(im.size)
 

十三、通道分离

  • 返回当前图像各个通道组成的一个元组
  • 分离一个 RGB 图像将产生三个新的图像
  • 分别对应原始图像的每个通道红、绿、蓝三张图片
from PIL import Image

im = Image.open("picture.jpg")

r,g,b = im.split()
print(r.mode)
print(r.size)
print(im.size)

十四、复制、裁剪、粘贴、合并

from PIL import Image

im = Image.open("picture.jpg")
# 复制
im.copy()
# 裁剪
im.crop((100, 100, 400, 400))
# 将一张图粘贴到另一张图像上
im.paste(im.transpose(Image.ROTATE_180),im)
# 合并类使用一些单通道图像,创建一个新的图像
Image.merge("RGB", im.split())

十五、几何变换

  • Image类有resize()、rotate()和transpose()、transform()方法进行几何变换
from PIL import Image

im = Image.open("picture.jpg")

# 修改尺寸
im.resize((128, 128))
# 角度旋转
im.rotate(45)
# 返回当前图像的翻转或者旋转的拷贝
# 值为:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,ROTATE_270
im.transpose(Image.ROTATE_90)
# 用给定的尺寸生成一张新的图像,与原图有相同的模式
im.transform((200, 200), Image.EXTENT, (0, 0, 300, 300))

十六、高级图片处理

  • 使用ImageEnhance对象就能快速地进行设置。 可以调整对比度、亮度、色平衡和锐利度
from PIL import Image
from PIL import ImageEnhance

im = Image.open("picture.jpg")
enh = ImageEnhance.Contrast(im)
enh.enhance(1.3).show("30% more contrast")

十七、滤波器处理

from PIL import Image
from PIL import ImageFilter

im = Image.open("picture.jpg")
# 均值滤波
im1 = im.filter(ImageFilter.BLUR)
# 找轮廓
im2 = im.filter(ImageFilter.CONTOUR)
# 边缘检测
im3 = im.filter(ImageFilter.FIND_EDGES)
im.show()
im1.show()
im2.show()
im3.show()

十八、设置透明度合成两张图

  • 使用给定的两张图像及透明度变量alpha,生成一张新的图像
  • 变量alpha值在0和1之间
  • 若变量alpha为0.0,返回第一张图像的拷贝。若变量alpha为1.0,将返回第二张图像的拷贝。
from PIL import Image

im1 = Image.open("picture1.jpg")
im2 = Image.open("picture2.jpg")
im = Image.blend(im1, im2, 0.30)
im.show()

十九、设置模式合成两张图

  • 使用给定的两张图像及mask图像作为透明度,生成一张新的图像
  • 图像的模式可以为“1”,“L”或者“RGBA”
  • 所有图像必须有相同的尺寸
from PIL import Image

im1 = Image.open("picture1.jpg")
im2 = Image.open("picture2.jpg")
im = Image.composite(im1, im2, 'L')
im.show()

二十、草稿模式

  • 速度要求比质量高的场合
  • 允许在不读取文件内容的情况下尽可能(可能不会完全等于给定的参数)地将图片转成给定模式和大小,这在生成缩略图的时候非常有效
from PIL import Image

im = Image.open("picture.jpg")

print(im.size,im.mode)
new_im = im.draft("L", (200,200))
print(new_im.size,new_im.mode)
new_im.show()

二十一、获取通道名称

  • 返回包括每个通道名称的元组
  • 例如,对于RGB图像将返回(“R”,“G”,“B”)
from PIL import Image

im = Image.open("picture.jpg")
print(im.getbands())

二十二、获取包围盒

  • 计算图像非零区域的包围盒
  • 这个包围盒是一个4元组,定义了左、上、右和下像素坐标
  • 如果图像是空的,这个方法将返回空
from PIL import Image

im = Image.open("picture.jpg")
print(im.getbbox())

二十三、获取像素值

from PIL import Image

im = Image.open("picture.jpg")
print(im.getdata())

二十四、获取图片极值

  • 返回一个2元组
  • 包括该图像中的最小和最大值
from PIL import Image

im = Image.open("picture.jpg")
print(im.getextrema())

二十五、指定位置像素值

from PIL import Image

im = Image.open("picture.jpg")
print(im.getpixel((10,0)))

二十六、获取图像直方图

from PIL import Image

im = Image.open("picture.jpg")
im_histogram = im.histogram()
print(im_histogram[0])

二十七、内存分配

  • 为图像分配内存并从文件中加载它
  • 返回一个用于读取和修改像素的像素访问对象
from PIL import Image

im = Image.open("picture.jpg")
pix = im.load()
print(pix[0,2])

二十八、查找指定的帧

  • 给定的动态图中查找指定的帧
  • 如果查找超越了序列的末尾,则产生一个EOFError异常
  • 当文件被打开时,PIL库自动指定到第0帧上
from PIL import Image

im_gif = Image.open("loading.gif")
print(im_gif.mode)
# 默认打开时是第0帧
im_gif.show()
im_gif.seek(1)
im_gif.show()
im_gif.seek(3)
im_gif.show()

二十九、获取当前帧位置

from PIL import Image

im_gif = Image.open("loading.gif")
print(im_gif.tell())
im_gif.seek(3)
print(im_gif.tell())

到此这篇关于python 包之 Pillow 图像处理教程分享的文章就介绍到这了!

Python 相关文章推荐
详解Python中用于计算指数的exp()方法
May 14 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
Python中static相关知识小结
Jan 02 Python
python实现控制台打印的方法
Jan 12 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
在notepad++中实现直接运行python代码
Dec 18 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 Python
Python与C++中梯度方向直方图的实现
Mar 17 Python
Python各协议下socket黏包问题原理
Apr 12 #Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 #Python
分享Python异步爬取知乎热榜
尝试使用Python爬取城市租房信息
Apr 12 #Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 #Python
Python实现批量将文件复制到新的目录中再修改名称
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 #Python
You might like
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
Python复制目录结构脚本代码分享
2015/03/06 Python
在Python中使用模块的教程
2015/04/27 Python
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
浅谈Python单向链表的实现
2015/12/24 Python
Python作用域用法实例详解
2016/03/15 Python
Python递归函数定义与用法示例
2017/06/02 Python
浅谈python迭代器
2017/11/08 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
优秀驾驶员先进事迹材料
2014/05/04 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
经典导游欢迎词
2015/01/26 职场文书
无线电知识基础入门篇
2022/02/18 无线电