学习自:PIL官方文档——Image

(2条消息) Python图像处理PIL各模块详细介绍_章子雎的博客-CSDN博客

一、Image模块

1、open

用法

open(fp,mode='r',formats=None)

说明

打开图像;不过据官网文档所说,调用该方法后,实际的图像文件并没有读入进来,只是当后续数据处理时才真正读入。

参数

fp

mode:只能是r;

format:一个图像格式的List或Tuple,为什么是一个集合呢?因为当我们要打开某个文件夹中的指定格式图像时,只需要将这些图片的格式放入该集合中,那样在调用open时只会打开在集合中格式的文件。如果该项设置为None,则会尝试打开所有格式的文件。

如果我们想查看所有支持的格式,可以在cmd中运行指令python -m PIL查看;或者使用函数PIL.features.pilinfo()

返回

Image对象

抛出错误

FileNotFoundError

PIL.UnidentifiedImageError:文件打开失败

ValueError:mode不是'r',或者fp是StringIO对象时报错

TypeError:format不是None、List、Tuple时报错

2、图像处理

方法(用法PIL.Image.xxx) 说明 注意事项
alpha_composite(im1,im2) im1、im2进行alpha融合 im1、im2需要有相同的尺寸,且必须都是RGBA模式
blend(im1,im2,alpha) 图像融合;alpha为im2占比  
composite(im1,im2,mask) 图像融合;融合时用到了mask  
eval(image,*args) 对图像中的每个像素用某个函数进行运算 如果有多个波段,则相同的函数将应用于每个波段上
merge(mode,bands) 多波段融合为一副图像  

3、构造图像

方法(PIL.Image.xxx) 说明 注意事项
new(mode,size,color=0) 用给定的mode和size创建新Image color是构造时所有像素点的值,如果是单波段,给单个值,多波段,则要构造为tuple形式
fromarray(obj,mode=None) 由某个array创建新Image  
frombytes(mode,size,data,decoder_name='raw',*args) 从数据流中创建新Image  
frombuffer 与frombytes类似,只是数据流是二进制缓冲区中的  

4、生成具有某种效果的图像

方法(PIL.Image.xxx) 说明 注意事项
effect_mandelbrot(size,extent,quality) 生成Mandelbrot集合图像  
effect_noise(size,sigma) 生成高斯噪声 sigma:噪声的标准离差
linear_gradient(mode) 生成线性梯度渐变图,大小256x256;  
radial_gradient(mode) 生成辐射状剃度颜色渐变图,大小256x256;  

二、Image类

1、方法,假设我们有Image对象im,则使用方法为im.xxx

方法 说明 注意事项
alpha_composite(im,dest=(0,0),source=(0,0)) alpha融合  
convert(mode=None,matrix=None,dither=None,palette=0,colors=256) 色彩转化,比如从彩色转灰色  
copy() 图像复制  
crop(box=None) 图像切割  
draft(mode,size) 配置图像文件加载器,这样当我们打开某个图像时,可以自动根据该加载器将图像转化为指定Mode 不一定是完全转化,而是转化为最接近的形式
effect_spread(distance) 将一幅图像上的所有像素点随机散播到该点所在区域附近  
entropy(mask=None,extrema=None) 计算图像的熵  
filter(filter) 用指定滤波器对图像进行滤波  
frombytes(data,decoder_name='raw',*args) 从二进制对象中加载图像  
getbands() 获取所有band的名字 对RGB图像使用,返回{'R','G','B'}
getbbox() 获得图像值为非零区域的box框  
getchannel(channel) 返回原图像中的单个通道图像  
getcolors(maxcolors=256) 返回一个List,指示图像中各颜色的像素点个数  
getdata(band=None)

以序列的方式返回图像的每个像素点的值。

每一列代表一个波段;如果想显示出来数据,可以list(im.getdata())

getextrema() 返回每个波段的最大最小值  
getpalette() 用list的方式返回图像的色板  
getpixel(xy) 返回指定点处的像素值,xy的形式(x,y)  
histogram(mask=None,extrema=None) 直方图  
paste(im,box=None,mask=None) 把另一个image粘贴到该image上  
point(lut,mode=None) 对每个像素点进行相同操作  
putalpha(alpha) 加载一个alpha图层到该图像上  
putdata(data,scale=1.0,offset=0.0) 从某个序列中拷贝数据到当前图像

从图像左上角开始,公式如下:

实际=data*scale+offset

putpalette(data,rawmode='RGB') 给该图像设置色板  
putpixel(xy,value) 给指定位置处的像素赋值  
quantize(color=256,method=None,kmeans=0,palette=None,dither=1) 用指定数量的颜色,将该图像转化为'P'mode  
reduce(factor,box=None) 图像缩小factor倍  
remap_palette(dest_map,source_palette=None) 重组织色板  
resize(size,resampe=3,box=None,reducing_gap=None) 变换图像大小

这个size是(w,h)样式,如果想要缩放至原大小的1/2,可以这样写:

r_i=img.resize((img.width/2,img.height/2))
rotate(...) 旋转图像(图像框架不旋转)  
save() 保存图像  
seek(frame) 跳转到指定帧处  
show(title=None,command=None) 展示图像  
split() 波段分解  
tell() 返回当前帧帧号  
thumbnail(size,resample=3,reducing_gap=2.0) 返回当前图像的缩略图  
tobitmap(name='image') 返回当前图像转化的位图  
to_bytes() 返回当前图像的字节对象  
transform(size,method,data=None,resample=0,fill=1,fillcolor=None) 对该图像进行变形,变形结果由参数给定  
transpose(method) 旋转图像(图像框架会一起旋转)  
verify() 验证图像内容(content) 常用于判断图像是否损坏
load() 为图像分配内存并加载图像  
close() 关闭图像  

2、属性,假设我们有Image对象im,则使用方法为im.xxx

属性 类型 说明
filename str 文件名
format str 图像格式
mode str 图像模式
size tuple 图像尺寸
width int
height int
palette PIL.ImagePalette.ImagePalette 色板
info dict 信息
is_animated bool 是否是动画(多余一帧)
n_frames int 帧数

Python:PIL(三)——Image的更多相关文章

  1. Python(三) PIL, Image生成验证图片

    Python(三) PIL, Image生成验证图片 安装好PIL,开始使用. 在PyCharm中新建一个文件:PIL_Test1.py 1 # PIL 应用练习 2 # 3 # import PIL ...

  2. Python PIL

    Python PIL PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. ...

  3. python PIL 图像处理

    python PIL 图像处理 This blog is from: https://www.jianshu.com/p/e8d058767dfa Image读出来的是PIL的类型,而skimage. ...

  4. 学习Python的三种境界

    前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...

  5. selenium webdriver (python) 第三版

    感谢 感谢购买第二版的同学,谢谢你们对本人劳动成果的支持!也正是你们时常问我还出不出第三版了,也是你们的鼓励,让我继续学习整理本文档. 感谢乙醇前辈,第二版的文档是放在他的淘宝网站上卖的,感谢他的帮忙 ...

  6. Python,PIL压缩裁剪图片

    自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...

  7. Python第三天 序列 数据类型 数值 字符串 列表 元组 字典

    Python第三天 序列  数据类型  数值  字符串  列表  元组  字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...

  8. 简学Python第三章__函数式编程、递归、内置函数

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  9. 初学Python(三)——字典

    初学Python(三)——字典 初学Python,主要整理一些学习到的知识点,这次是字典. #-*- coding:utf-8 -*- d = {1:"name",2:" ...

  10. Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式

    Python第三天 序列  5种数据类型  数值  字符串  列表  元组  字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell ...

随机推荐

  1. 不难懂-------git版本回退

    1. git log 定义:该命令显示从最近到最远的提交日志.每一次提交都有对应的 commit id 和 commit message.   如果嫌弃输出的信息杂乱无章,那么加上 --pretty= ...

  2. 记一次 .NET 某智能交通后台服务 CPU爆高分析

    一:背景 1. 讲故事 前天有位朋友加微信求助他的程序出现了CPU爆高的问题,开局就是一个红包,把我吓懵了! 由于是南方小年,我在老家张罗处理起来不方便,没有第一时间帮他处理,朋友在第二天上午已经找出 ...

  3. 【存】008 Linux 文件查找 find

    01 一起来认识 find! 在 Linux 系统,find 毫无疑问是最强的文件查找工具.find 一般会与其他命令结合,将查找到的结果作为参数传入到后置命令中,进行删除.统计.复制迁移等操作. 0 ...

  4. HTML 基础1

    HTML 超文本标记语言 文件后缀html,htm 标签成对出现:开始标签--结束标签 元素内容位于开始标签--结束标签之间(可以有空内容) 空元素<a/> 大小写不敏感 元素,属性 &l ...

  5. SharePoint Online 为Modern Page添加脚本

    前言 众所周知,如果我们想向SharePoint 页面添加脚本,最方便的便是经典页面,添加方式主要有内容编辑器Web部件或者直接使用SharePoint Designer. 但是,如果页面是Moder ...

  6. AT [ABC176F] Brave CHAIN

    首先可以发现这样一个事实:在每次操作当中,都有三张牌是已经固定的,只有两张牌是不确定的,于是我们可以发下每一次操作的状态可以简单的使用这两张牌来描述,于是可以考虑令 \(dp_{i, j, k}\) ...

  7. CentOS 7下iptables配置添加修改规则端口方法(转)

    简介: Linux CentOS 7默认没有安装iptables,默认的防火墙是firewalld,云吞铺子分享CentOS 7系统下iptables安装.iptables规则配置(放行或者禁用端口) ...

  8. C语言system函数

    我们今天来看看在windows操作系统下system () 函数详解(主要是在C语言中的应用) 注意:在windows下的system函数中命令可以不区别大小写! 函数名: system 功 能: 发 ...

  9. 内联函数 在ios中的运用 --黄仁斌

    定义:     有函数的结构,但不具备函数的性质,类似于宏替换.代码中使用inline定义,能否形成内联函数,还要看编译器对内联函数体内部的定义的具体处理.产生的动机:     消除函数调用产生的开销 ...

  10. nginx负载均衡中常见的算法及原理有哪些?

    一.nginx负载均衡常用算法 1.1 轮询 轮询,nginx默认方式.一次将请求分配给各个后台服务器. upstream backserver { server 10.0.0.7; server 1 ...