python图像处理模块Pillow--Image模块
一、简介
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用
由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow
二、安装
使用 pip 命令安装Pillow:
$ pip install Pillow
三、 基本概念
1、通道
每张图片都是由一个或者多个数据通道构成,PIL允许在单张图片中合成相同维数和深度的多个通道。
以RGB图像为例,每张图片都是由三个数据通道构成,分别为R、G和B通道。而对于灰度图像,则只有一个通道。
对于一张图片的通道数量和名称,可以通过方法getbands()来获取。方法getbands()是Image模块的方法,它会返回一个字符串元组(tuple)。该元组将包括每一个通道的名称
方法getbands()的使用如下:
from PIL import Image im = Image.open(image_path) # image_path为图像的绝对路径
# 返回图像的通道 print(im.getbands(), type(im.getbands()))
输出:('R', 'G', 'B', 'A') <class 'tuple'>
2、模式
图像的模式定义了图像的类型和像素的位宽,当前支持如下模式:
1:1位像素,表示黑和白,但是存储的时候每个像素存储为8bit。
L:8位像素,表示黑和白。
P:8位像素,使用调色板映射到其他模式。
RGB:3x8位像素,为真彩色。
RGBA:4x8位像素,有透明通道的真彩色。
CMYK:4x8位像素,颜色分离。
YCbCr:3x8位像素,彩色视频格式。
I:32位整型像素。
F:32位浮点型像素。
PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。
可以通过Image对象的mode属性读取图像的模式。其返回值是包括上述模式的字符串
属性mode的使用如下:
from PIL import Image im = Image.open(image_path)
print(im.mode, type(im.mode))
输出:RGBA <class 'str'>
3、尺寸
通过Image对象的size属性可以获取图片的尺寸。图像大小,以像素为单位。大小是一个2元组(宽度、高度)(width, height)
属性size的使用如下:
from PIL import Image im = Image.open(image_path)
# 返回图像尺寸
print(im.size, type(im.size))
输出:(750, 1334) <class 'tuple'>
4、坐标系统
PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角。注意:坐标值表示像素的角;位于坐标(0,0)处的像素的中心实际上位于(0.5,0.5)。
坐标经常用于二元组(x,y)。长方形则表示为四元组,前面是左上角坐标。例如,一个覆盖800x600的像素图像的长方形表示为(0,0,800,600)。
5、调色板
调色板模式 ("P")使用一个颜色调色板为每个像素定义具体的颜色值
6、信息
使用Image对象的info属性可以为一张图片添加一些辅助信息。这个是字典对象。加载和保存图像文件时,多少信息需要处理取决于文件格式。
存储与图像相关的数据的字典。文件处理程序使用此字典传递从文件中读取的各种非图像信息
属性info的使用如下:
from PIL import Image im = Image.open(image_path)
# 返回图像信息
print(im.info, type(im.info))
输出:{} <class 'dict'>
7、滤波器
对于将多个输入像素映射为一个输出像素的几何操作,PIL提供了4个不同的采样滤波器:
NEAREST:最近滤波。从输入图像中选取最近的像素作为输出像素。它忽略了所有其他的像素。
BILINEAR:双线性滤波。在输入图像的2x2矩阵上进行线性插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。
BICUBIC:双立方滤波。在输入图像的4x4矩阵上进行立方插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。
ANTIALIAS:平滑滤波。这是PIL 1.1.3版本中新的滤波器。对所有可以影响输出像素的输入像素进行高质量的重采样滤波,以计算输出像素值。在当前的PIL版本中,这个滤波器只用于改变尺寸和缩略图方法。
注意:在当前的PIL版本中,ANTIALIAS滤波器是下采样(例如,将一个大的图像转换为小图)时唯一正确的滤波器。BILIEAR和BICUBIC滤波器使用固定的输入模板,用于固定比例的几何变换和上采样是最好的。
Image模块中的方法resize()和thumbnail()用到了滤波器
方法resize()的使用如下:
语法:Image.resize(size, resample=0)
参数:size-2元组:(宽度、高度),以像素为单位
resample-可选的重采样过滤器,如果省略,或者图像的模式为“1”或“P”,则将其设置为nearest
from PIL import Image course_im = Image.open(course_path)
print(course_im.size, type(course_im.size))
course_resize = course_im.resize((538, 336)) # 返回此图像的大小调整后的副本
print(course_resize.size)
输出:
(750, 400)
(538, 336)
如果要使用其他滤波器可以通过下面的方法来实现:
from PIL import Image course_im = Image.open(course_path)
print(course_im.size, type(course_im.size))
course_resize = course_im.resize((538, 336), Image.ANTIALIAS)
print(course_resize.size)
方法thumbnail()的使用如下:
语法:Image.thumbnail(size, resample=1)
参数:size-2元组:(宽度、高度),以像素为单位
resample-可选的重采样过滤器,如果省略,则默认为PIL.Image.BICUBIC
把这个图像做成缩略图
请注意,PIL当前版本中的BILINEAR和BICUBIC并不适合生成缩略图。你应该用ANTIALIAS,除非速度比质量重要得多。
from PIL import Image im = Image.open(avtar_path)
avtar_im.thumbnail((98, 98)) # 返回None
四、Image模块
Image模块是PIL中最重要的模块,它有一个类叫做image,与模块名称相同。Image类有很多函数、方法及属性,接下来将依次对image类的属性、函数和方法进行介绍。
类函数
实例属性
实例方法
1、paste(im, box=None, mask=None) 将另一个图像粘贴到此图像中
参数:
box:要么是一个2元组给出左上角,一个4元组定义左、上、右、下像素坐标,或None(比如(0,0))
mask:可选的掩码图像
注意:如果模式不匹配,则将粘贴的图像转换为此图像的模式
python图像处理模块Pillow--Image模块的更多相关文章
- Windows安装Python图像处理库:PIL模块
平常一般都在Linux下用Python,今天女票突然说让帮忙把一些图片全部弄成一个分辨率的,作为程序员,这种重复的工作还是交给计算机吧. 废话不多说,打开Cmd看下Windows的python下面是否 ...
- Python图像处理库Pillow入门
http://python.jobbole.com/84956/ Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处 ...
- Python图像处理库Pillow常用使用方法
PIL(Python Imaging Library)是Python一个强大方便的图像处理库,只支持到Python2.7.Pillow是PIL的一个派生分支,在Python3中用Pillow代替PIL ...
- python图像处理库Pillow基本使用方法
安装pillow pillow的文档页面,documentation of Pillow 生成一个有单一颜色的图像 from PIL import Image, ImageDraw img = Ima ...
- python第三方库-图像处理库pillow
python图像处理库pillow 安装 pip install pillow 使用 导入 from PIL import pillow 读取图像 picture = Image.open('test ...
- Python PIL、Pillow笔记
原文链接:https://blog.csdn.net/FlashKoala/article/details/90649464 一.PIL.Pillow简介 PIL(Python Imaging Lib ...
- Python图像处理库:PIL中Image,ImageDraw等基本模块介绍
Python图像处理库:PIL中Image,ImageDraw等基本模块介绍 标签: 图像处理PILPYTHON 2016-08-19 10:58 461人阅读 评论(0) 收藏 举报 分类: 其他 ...
- 解决Python图片处理模块pillow使用中出现的问题
最近爬一个电影票房的网站(url:http://58921.com/alltime),上面总票房里面其实是一张图片,那么我需要把图片识别成文字,来获取票房数据. 我头脑里第一想到的解决方案就是要用 ...
- Python图像处理库:Pillow 初级教程
Python图像处理库:Pillow 初级教程 2014-09-14 翻译 http://pillow.readthedocs.org/en/latest/handbook/tutorial.html ...
- python学习第十三天 -模块和包
模块和包 大家都知道,在计算机程序开发的过程中,随着程序代码越写越多,这样代码就会越不容易维护. 有时候为了好维护代码,把不同功能的函数放到不同的xx.py文件中. 在python中,一个.py文件就 ...
随机推荐
- 上传文件Base64格式(React)
记录一下上传文件时将文件数据转为Base64的方法 通过 FileReader对象创建一个实例,然后使用 readAsDataURL方法将数据转为Base64格式 注意: 读取过程是异步的 绑定onl ...
- SQLServer 学习笔记之超详细基础SQL语句 Part 10
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 9------------------- 删除约束的语法 ALTER T ...
- singleInstance和singleTask导致startActivityForResult回调失败
先来了解下这两种启动模式: 1.singleInstance,全局唯一,它的实例在全局(即在众多任务栈中)是唯一的,它单独地存在于属于自己的任务栈中,而且这个任务栈没有其他实例. 2.singleTa ...
- java 使用 引用数据类型(以Scanner、Random模块为例)
创建一个新变量 类型 变量名 = new 类型() 举个例子: Scanner sc = new Scaner() 使用引用数据类型中的功能: 变量.功能名字() Scanner类:接受键盘输入 1. ...
- HBase的写事务,MVCC及新的写线程模型
MVCC是实现高性能数据库的关键技术,主要为了读不影响写.几乎所有数据库系统都用这技术,比如Spanner,看这里.Percolator,看这里.当然还有mysql.本文说HBase的MVCC和0.9 ...
- centos 安装elk监控
下面就是要安装一些收集日志 或者分配日志的工具,我选择的是 Filebeat 来收集日志,然后放到kafka中 让kafka这个消息队列来分配生产者消费者 然后通过Logstash 或者一个国产大神 ...
- python 进程池pool
进程池子 当你成千上万的业务需要创建成千上万的进程时,我们可以提前定义一个进程池 from multiprocessing import Pool p = Pool(10) #进程池创建方式,类似空任 ...
- python + pyqt5 QlineEdit QMessageBox实现信息录入和消息弹框提醒
本人现在在做自动化工具开发的工作,因此,记录下自己平时遇到的问题和解决之道,还有一些简单的小工具 以下为主代码 # --*-- coding:utf-8 --*-- from first import ...
- 2.2Python基础语法(二)之运算符
返回总目录 目录: 1.Python运算符的分类 2.算数运算符 3.复合运算符 4.比较运算符 5.逻辑运算符 (一)Python运算符的分类: (二)算数运算符: 注意下面三种算数符号: 1.** ...
- Alpha冲刺报告(6/12)(麻瓜制造者)
今日已完成 邓弘立: 看github上的开源库 确定了几个对UI改进有帮助的第三方库 符天愉: 部署了用户修改信息,修改头像的接口,并且完成两个接口的api文档,复习了PHP的无限分类来实现商品的发布 ...