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中类型关系和继承关系实例详解
May 25 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
python生成ppt的方法
Jun 07 Python
对Python _取log的几种方式小结
Jul 25 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
python 解决Fatal error in launcher:错误问题
May 21 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 Python
python 5个顶级异步框架推荐
Sep 09 Python
python自动化办公操作PPT的实现
Feb 05 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 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
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
Python中用Spark模块的使用教程
2015/04/13 Python
python写入中英文字符串到文件的方法
2015/05/06 Python
Python机器学习之决策树算法
2017/12/22 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
学年末自我鉴定
2014/01/21 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
施工员岗位职责
2015/02/10 职场文书
教师节大会主持词
2015/07/06 职场文书
门卫管理制度范本
2015/08/05 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server