Python Pillow库:Image模块图像处理入门教程

创始人
2024-12-24 12:41:24
0 次浏览
0 评论

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)

热门文章
1
Java与JavaScript:基础入门... javas是什么?Java是一种面向对象的编程语言,可用于编写跨平台的应用软件。...

2
Java操作文本值:提取与求和技巧详解 java怎么把文本框的数字读出来想加求和获取Java文本中的值并执行操作有两种方...

3
手机QQ浏览器助力安卓用户:JavaSc... 请问,哪种浏览器支持JavaScript?——本人使用安卓手机。他们都受到支持。...

4
用Java或C语言轻松解决经典数学问题:... 我想求救100元买100鸡的问题用java程序编写或c程序编写各位大虾有知道的帮...

5
C语言实现阶乘累加和:从函数定义到代码示... 用C语言求1到N的阶层的累加和思路:首先定义一个函数计算一个数的阶乘,然后从1到...

6
Python教程:高效判断素数的实现方法 用python判断素数1.根据素数的定义,只要一个数除了1和它本身之外没有其他约...

7
Python教程:如何验证输入字符串是否... python中如何判断输入的字符串为实数,谢谢!尝试:x=float(input...

8
C语言实现400位高精度计算器:思路解析... 用C语言做一个可进行加减乘除的400位计算器?(求思路)这个可以用个位数全加器的...

9
C语言数组定义与赋值详解:char与in... c语言数组定义和赋值是什么?C语言数组定义为:charc[6]={'c','h'...

10
C语言期末复习攻略:基础知识点+经典例题... c语言怎么学考试基础知识笔记经典例题题库指针大一期末考试题入门二级怎么学代码烟花...