学习自: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创建新Imagecolor是构造时所有像素点的值,如果是单波段,给单个值,多波段,则要构造为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)变换图像大小 
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

属性类型说明
filenamestr文件名
formatstr图像格式
modestr图像模式
sizetuple图像尺寸
widthint
heightint
palettePIL.ImagePalette.ImagePalette色板
infodict信息
is_animatedbool是否是动画(多余一帧)
n_framesint帧数
  •