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解析中国天气网的天气数据
Mar 21 Python
Python编码类型转换方法详解
Jul 01 Python
python实现俄罗斯方块游戏
Mar 25 Python
Python异常处理知识点总结
Feb 18 Python
python实现自动化上线脚本的示例
Jul 01 Python
python 求某条线上特定x值或y值的点坐标方法
Jul 09 Python
numpy:找到指定元素的索引示例
Nov 26 Python
Python实现bilibili时间长度查询的示例代码
Jan 14 Python
Python计算信息熵实例
Jun 18 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
python logging模块的使用详解
Oct 23 Python
python热力图实现简单方法
Jan 29 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求小于1000的所有水仙花数的代码
2012/01/10 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
js随机生成一个验证码
2017/06/01 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
在vue中获取dom元素内容的方法
2017/07/10 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
Python实现发送email的几种常用方法
2014/08/18 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
Python同时迭代多个序列的方法
2020/07/28 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
会计电算化应届生自荐信
2014/02/25 职场文书
党员倡议书
2015/01/19 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
运动会广播稿300字
2015/08/19 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL