Python Pillow库:Image模块图像处理入门教程
python包之Pillow图像处理教程
1.安装使用pip安装pillow包:pipinstallPillow2.打开图片,使用Image类加载图片:fromPILimportImage;img=Image.open('path/to/image.jpg');3.转换并保存格式将图像转换为其他格式并保存:img.save('new_image.png');(128,128),艾玛·格.ANTIALIAS);5、获取图片属性:width,height=img.size;获取图像模式:mode=img.mode;图像文件图像信息类型:img.format图像文件大小:img.size图像分辨率:img.info['dpi']7.图像调色板显示面板:img.getpalette()8.在图像上绘图:ig.paste((255,0,0),(x,y),mask)9.图片模式调整图片模式:img=img.convert('RGB');10、图像到灰度转换方式:img=img.convert('L');十1、matrix矩阵到图像转换方式:new_img=Image.fromarray(np.uint8(matrix));12.图像大小调整图像大小:img=img.resize((new_width,new_height),Image.ANTIALIAS);13.分离通道,分离图像通道:rgb=img.split();14.复制、裁剪、粘贴和合并图像:new_img=img.copy();new_img=img.crop((x,y,x+w,y+h));粘贴图像:new_img.paste(img,(x,y),mask)合并图像:new_img=Image.blend(img1,img2,alpha);15、几何变换旋转图像:new_img=img.rotate(Degree,expand=True);图片优化:new_img=img.filter(ImageFilter.BLUR);17.应用滤镜处理滤镜:new_img=img.filter(ImageFilter.DETAIL);18.调整透明度以合并两个图像合并两个图像:new_img=Image.alpha_composite(img1,img2);19、设置合并两幅图像的模式:new_img=Image.blend(img1,img2,alpha);20.草稿模式使用草稿模式:img=img.copy();img.paste(img,(x,y),mask);获取通道名称:channel_names=img.split()._getchannelnames();22.获取边界框获取边界框:box=img.getbbox();23、获取像素值Value:rgb=img.getpixel((x,y));24.获取图像的最大值获取最大值:min_value,max_value=img.getextrema();25.指定该位置的像素值。设置该位置的像素值:new_img=img.putpixel((x,y),(new_r,new_g,new_b));26.获取图像直方图获取直方图:hist=img.histogram();27.内存分配内存分配:img=Image.new(mode,size);28、查找指定帧:frame=img.tell();。
告诉();
PythonPillow库Image模块构建图像、图像处理与Image对象方法
PIL.Image.new(mode,size,color=0)创建红色RGB图像示例:PIL.Image.fromarray(obj,mode=None)将序列转换为图像维数组创建灰度图像:示例2:使用fromarray对图像进行灰度化PIL.Image.frombytes(mode,size,data,decoder_name='raw',*args)创建基于二进制数据的图像。注意:data数据格式是字符串,使用StringIO对其进行拆分,并使用open函数加载它。
示例:PIL.Image.frombuffer(mode,size,data,decoder_name='raw',*args)创建类似于frabytes的图像。
并非所有模式都支持,支持的模式有“L”、“RGBX”、“RGBA”和“CMYK”注意:对于字符串格式的整个图像,请使用StringIO将其包装并使用open函数加载。
PIL.Image.alpha_composite(im1,im2)减少m2并将其融合为m1,两者都必须处于RGBA模式。
示例:PIL.Image.blend(im1,im2,alpha)基于alpha值进行融合示例:PIL.Image.composite(image1,image2,mask)使用透明遮罩来混合头像以创建合成图像。
示例:PIL.Image.eval(image,*args)根据传入的函数处理图像中的每个像素。
示例:PIL.Image.merge(mode,band)将一组单通道图像合并为多通道图像示例:用PIL.Image替换图像的通道值。
alpha_composite(im,dest=(0,0),source=(0,0))将im融化为Image,并用Image.alpha_composite转换图像模式(Image,im模式转换支持“L”、“RGB”和“)。
CMYK”。
有些矩阵参数只能转换为“L”或“RGB”。
当无法转换模式时,可以先转换RGB模式,然后再转换。
将颜色模式转换为L模式的示例计算公式:官方示例PIL.Image.copy()复制图像PIL.Image.crop(box)从图像中检索框矩形区域的图像PIL.Image.draft(mode),size)配置图像加载器以快速获取尽可能匹配原始比例的图像。
注意:该方法会改变图像对象。
如果图像已经加载,则此方法无效。
PIL.Image.filter(filter)使用给定的过滤器过滤此图像,请参阅ImageFilter模块过滤器PIL.Image.getbands()获取图像中每个波段名称的元组PIL.Image.getbbox()获取图像notFor框值在0范围内,PIL.Image.getcolors(maxcolors=256)检索图像中使用的颜色列表。
如果该值超过maxcolors设置值,则返回None。
返回值列表(计数、像素)。
PIL.Image.getdata(band=None)检索图像中像素的序列对象。
像素是从图像中每个通道的从左到右、从上到下获取的。
返回包含每个通道的最小值和最大值的元组列表PIL.Image.getpalette()获取图像的调色板,或颜色值列表[r,g,b,...]或None如果没有。
PIL.Image.getpixel(xy)检索给定位置的像素值PIL.Image.histogram(mask=None,extrema=None)检索以mack作为掩码的直方图PIL.Image.paste(im,box=None,mask=None)粘贴图像PIL.Image.point(lut,mode=None)处理图像中的每个像素PIL.Image.putalpha(alpha)向图像添加一个alpha层,即将给定通道复制到将图像alpha层PIL.Image.putdata(data,scale=1.0,offset=0.0)数据序列像素数据复制到图像PIL.Image.putpalette(data,rawmode='RGB')图像附加调色板PIL.Image.putpixel(xy,value)更改单个元素的值PIL.Image.resize(size,resample=0,box=None)调整图像PIL的大小。
remap_palette(dest_map,source_palette=注)重新着色PIL.Image.rotate(angle,resample=0,expand=0,center=None,translate=None,fillcolor=None)逆时针选择图像PIL.Image.save(fp,format=None,**params)保存图片,不指定格式,根据扩展名确定格式。
不必指定扩展名。
ARROW.Image.seek(frame)提供访问对于动态图像。
当前帧的索引号为PIL.Image.show(title=None,command=None),显示图像。
主要用于调试PIL.Image.split()分割图像通道,例如RGB分割成(红、绿、蓝)三个单通道图像元组PIL.Image.getchannel(channel)获取通道通道,以及返回L模式图像参数:channel–channel,如:RGBA如下通道为('R','G','B','A'),需要获取A通道通道参数值,即可以是A或通道索引号3.PIL.Image.thumbnail(size,resample=3)将图像转换为缩略图PIL.Image.tobitmap(name='image')返回转换后的X11位图图像,只能与模式1图像一起使用PIL.Image(encoder_name='raw',*args)将图像转换为字节对象并返回PIL.Image.transform(size,metho)d,data=None,resample=0,fill=1,fillcolor=None)变形图像PIL.Image.EXTENT(剪出一个矩形)数据参数指定裁剪区域(左、上、右、下);PIL.Image.AFFINE(仿射变换)数据参数(a,b,c,d,e,f),从(ax+by+c,dx+ey+f)中获取输出图像中的(x,y)值,对原始图像进行缩放、平移、旋转和裁剪。
PIL.Image.PERSPECTIVE(透视变换)PIL.Image.QUAD(4元图像变换)数据参数(x0,y0,x1,y1,x2,y2,x3,y3)分别对应左上、左下四个角、右下、右上ARROW.Image.MESH(网格图像变换)数据参数(bbox、quad)ARROW.Image.transpose(方法)旋转图像,以单位为单位翻转90度并旋转参数:PIL.Image.FLIP_LEFT_RIGHT,向左翻转。
ARROW.Image.FLIP_TOP_BOTTOM,将顶部向下翻转。
ARROW.Image.ROTATE_90.90度旋转。
ARROW.Image.ROTATE_180.180度旋转。
ARROW.Image.ROTATE_270,270度旋转。
ARROW.Image.TRANSPOSE,上下颠倒,先左右翻转,然后旋转90度。
ARROW.Image.TRANSVERSE首先左右翻转,然后顺时针旋转90度。
PIL.Image.verify()验证文件内容。
检查文件是否损坏。
PIL.Image.load()为图像分配存储空间并加载像素数据PIL.Image.close()关闭文件指针(如果可能)。
仅用于关闭未读取的图像并通过load()方法关闭文件。
PIL.Image.filename文件名或路径PIL.Image.format文件格式,JPGE、PNG等PIL.Image.mode图像模式,RGB、RGBA、CMYK、1、L、P等PIL.Image.size图片大小,(宽,高)。
PIL.Image.width宽度PIL.Image.height高度PIL.Image.palette调色板PIL.Image.info包含图像相关数据的字典
python的pillow库怎么使用
Pillow是Python中的一个图像处理库(PIL:PythonImageLibrary),它提供了广泛的文件格式支持和强大的图像处理能力,包括图像存储、图像显示、格式转换和基本的图像处理操作。
1)使用Image类PIL中最重要的类是ImageClass。
您可以通过多种方式创建此类的实例,可以从文件加载图像、处理其他图像或从头开始创建它们。
要从文件加载图像,可以使用图像模块中的open()函数:
[Python]viewplanecopy
>>mpil从这里导入图片>>im=Image.open("E:/photoshop/1.jpg")加载成功,会返回一个IMAGE对象,可以使用instance属性查看文件内容是:
[Python]视图平面复制
>>print(im.format,im.size,im.mode)('JPEG',(600,351),'RGB')
>>格式此属性标识图像源。
如果图像不是从文件中读取的,则其值为None。
size属性是一个二元元组,包含宽度和高度(width和height,均以px为单位)。
mode属性定义图像带的数量和名称,以及像素类型和深度。
常见的模式是“L”(亮度)用于灰度图像,“RGB”用于真彩色图像,“CMYK”用于照明图像。
如果打开文件时发生错误,则返回IOError。
只要有Image类的实例,就可以通过该类的方法处理图像。
例如,以下方法可能会显示图像:
【Python】viewplane复制
im.show()
2)图像PIL模块大量图像的读写支持格式。
使用image模块中的open()函数从磁盘读取文件。
您不需要知道文件格式即可打开它,该库会根据文件内容自动确定文件格式。
要保存文件,请使用Image类的save()方法。
保存文件时文件名变得很重要。
除非您指定格式,否则库将以文件扩展名保存。
加载文件并将其转换为PNG格式:
[Python]ViewplaneCopy
“Python图像库测试”
从pil导入i图像
导入操作系统
导入sys
forinfile[1:]在sys.argv中:
f,e=os.path.splitext(infile)
outfile=f+''png'
ifinfile!=outfile:
尝试:
image.open(infile).save(outfile)
IOError除外:
print('无法转换',infile)
save()方法的第二个参数可以是文件指定格式。
3)创建缩略图
缩略图是网络开发或图像软件预览中常用的基本技术,使用Python的Pillow图像库可以轻松创建缩略图:
[Python]viewplanecopy#创建缩略图Size=(128,128)
InfileinGlobe.globeFor("E:/photoshop/*.jpg"):
f,ext=os.path.splitext(infile)
img=Image.open(infile)
>img.thumbname(size,Image.ANTIALIAS)
img.save(f+.thumbname","JPEG")
上面的代码将保存所有jpg图像文件在Photoshop下使用智能文件名创建并保存glob模块的缩略图经常使用批量匹配技术用于图像处理。
注意:Pillow库不直接解码或加载图像栅格数据。
当您打开文件时,仅读取文件头信息来确定格式、颜色模式、大小等。
文件的其余部分不会被主动处理。
这意味着无论图像大小和压缩方法如何,打开图像文件的操作都非常快。
4)剪切、粘贴和合并图像的操作
Image类中的方法允许您操作图像的部分选择该方法获取图像的一部分。
.,例如:
[Python]视图平面复制
#裁剪、粘贴和合并
im=Image.open("E:/photoshop/lena.jpg")
框=(100,100,300,300)
area=im.crop(box)
矩形选区有一个4元组定义,分别代表左、上、右、下坐标。
该库使用左上角作为坐标原点,单位为px,因此上诉代码复制了一个200x200pixel的矩形选区。
现在可以处理该选择并将其粘贴到原始图像中。
[Python]ViewPlane复制
Area=area.transpose(Image.ROTATE_180)
im.paste(area,box)
粘贴矩形选区时,需要确保尺寸一致。
此外,矩形选区不能延伸到图像之外。
但是,您不需要确保矩形选区的颜色模式与原始图像的颜色模式匹配,因为矩形选区的颜色会自动更改。
5)分离和合并颜色通道
对于多通道图像,有时您希望在处理过程中以及之后单独处理每个通道想要在Pillow中完成多通道的重新合成,很简单,如下:[Python]viewplanecopy
r,g,b=imsplit()
im.=Image.merge("RGB",(r,g,b))
对于split()函数,如果是单通道,则返回自身,否则返回各个通道。
是。
6)几何变换
图像的几何变换是一个基本过程,其中包括Pillow中的resize()和rotate(),用法如下:
[Python]视图平面复制
out=im.resize((128,128))
out=im.rotate(45)#反方向的度数
其中,resize()该函数的参数是一个新图像尺寸的祖先,而rotate(),必须输入顺时针旋转角度。
在Pillow中,专门定义了一些常见的旋转:
[Python]ViewPlaneCopy
out=im.transpose(Image.FLIP_LEFT_RIGHT)
out=im.transpose(Image.FLIP_TOP_BOTTOM)
out=im.transpose(Image.ROTATE_90)
out=im.transpose(Image.ROTATE_180)
out=im.transpose(Image.ROTATE_270)
7)色彩空间变换
在处理图像时,执行根据需要进行颜色空间转换,例如将颜色转换为灰度:
[Python]Viewplanecopy
cmyk=im."CMYK")
gray=im.convert("L")
8)图像过滤
GeFilter模块中的Im中的图像过滤,在本模块中预定义了几个增强过滤器,可以通过FILTER()函数使用:
BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES。
,更平滑,更平滑_更多,更快。
其中BLUR是均值滤波,CONTOUR是找轮廓,FIND_EDGES是检测边缘,使用该模块时需要先导入:
【Python】viewplane复制
从pil导入imagefy
imgF=Image.open("E:/photoshop/lena.jpg")
outF=imgF.filter(ImageFilter.DETAIL)
conF=imgF.filter(ImageFilter.CONTOUR)
edgeF=imgF.filter(ImageFilter.FIND_EDGES)
imgF.show()
outF.show()
conF.show()
edgeF.show()
此外,ImageFilter模块还有一些还包括高度可扩展的滤镜:
类PIL.ImageFilter.GaussianBlur(radius=2)
GaussianBlurFilter。
参数:
半径-BlurRadius方形PIL。
ImageFilter.unsharpMask(radius=2,percent=150,border=3)
UnsharpMaskFilter。
有关参数的说明,请参阅Wikipedia的AlunsharpMasking的Sentry问题。
ntkernels。
当前版本中,KernelScan只能应用于“L”和“RGB”图像。
参数:
size-内核大小,给定(宽度,高度)。
在当前版本中,该值应为(3,3)或(5,5)。
包含队列内核权重的Kernel-Ace。
Scale-ScaleFactor。
如果给定,则结果除以每个像素的该值。
默认值是内核权重的总和。
Offset-Offset。
如果给定,则将该值添加到其结果中,然后除以比例因子。
:
Size-kernelSize,以像素为单位。
Rank-WhatPixelValueTopPick.use0ForMinFilter,size*size/2forMedianFilter,size*size-1forMaxFilter等.
类PIL.ImageFilter.MedianFilter(size=3)
ActionTeamedianfilter。
选择给定大小的窗口中的平均像素值。
参数:
size-内核大小,以像素为单位)Aminfilter。
创造。
选择窗口中给定大小的最小像素值。
参数:
size-内核大小,以像素为单位。/p>
创建一个最大过滤器。
选择给定大小的窗口中最大的像素值。
参数:
Size-内核大小,以像素为单位。类PIL.ImageFilter.ModeFilter(size=3)
Createamodefilter。
选择给定大小的框中最常见的像素值。
像素值其中仅出现一次或两次的被忽略;如果某个像素值出现多次,则保留原始像素值。
参数:
size-内核大小,以像素为单位更多信息请访问:PIL/ImageFilter
9)图像增强
图像增强也是图像预处理中的一项基本技术,PILW中的Image增强功能主要ImageEnhance模块,通过该模块可以调整图像的颜色、对比度、饱和度和锐化:
[Python]ViewPlaneCopy
ptoILimport图像增强
imgE=Image.open("E:/photoshop/lena.jpg")
imgEH=ImageEnhance.Contrast(imgE)
imgEH.enhance(1.3).show(''对比度增加30%'')
图像增强:
classPIL.ImageEnhance.color(image)
调整图像的色彩平衡。
该类可以用来调整图像的色彩平衡,方法类似于电视机上的色彩控制。
增强系数为0.0。
提供系数为1.0的黑白图像。
PIL类。
>该类可用于控制风扇图像的对比度,类似于电视机上的对比度控制。
增强因子0.0给出纯灰色图像。
因子1.0给出原始图像。
PIL类。
图像增强。
Brightness(Image)
调整图像的亮度。
该类可用于控制图像的亮度。
调整图像的清晰度。
该类可用于调整图像的清晰度。
增强因子0.0会产生模糊的图像,因子1.0会产生原始图像,因子2.0会产生清晰的图像。
图像增强的细节可以通过测试给出:PIL/ImageEnhance
除了上面介绍的内容之外,Pillow还有几个强大的功能:
PIL.Image.alpha_composite(im1,im2)
PIL.Image.blend(im1,im2,alpha)
PIL.Image.composite(imagege1,image2,mask)PIL.Image.eval(image,*args)
PIL图像.fromarray(obj,模式=无)
PIL.Image.frombuffer(模式),大小,数据,decoder_name='raw',*args)