当前位置: 首页 > 后端技术 > Python

PIL库简单操作

时间:2023-03-25 20:39:08 Python

灰度图和RGB图像灰度图是一个二维数组,每个值代表这个像素点的灰度值(0到255之间的一个值),数组的维数(shape)表示图片的长宽(单位像素px),先看一个例子fromPILimportImageimportnumpyasnpdata=np.ones((16,16),dtype=np.uint8)#创建全1的数组data=data*255#将数组的所有元素乘以255print(data)data[4:12,8]=0#将中间的一些值设置为0print(data)img=Image.fromarray(data,'L')#将二维数组转换为灰度图img.show()#在屏幕上显示图片我们看一下显示的图片,会看到一个1。然后我们再看数据,还有你会发现你也可以看到一个1,这个是不是很容易理解。RGB图片是一个三维数组(长,宽,3)。其实你可以把它看成是像灰度图一样的二维数组,即维度为(长,宽)。这样每个元素的值就是一个一维数组,而这个一维数组是由三个元素[R,G,B]组成的,将其转换成灰度图也很简单,只需需要把这个一维数组按照一定的规则转换成0-255之间的值。在PIL中,是这样换算的:L=R299/1000+G587/1000+B*114/1000。RGBA图片是一个三维数组(长,宽,4)。如果把它看成一个二维数组,每个元素就是一个由四个元素组成的一维数组,即[R,G,B,A],A代表透明度。PILlibraryfromPILimportImagepropertyImage.mode:图像的格式,如灰度'L',颜色'RGB','RGBA'Image.size:图像的大小Image.info:图像的信息方式imageImage.open(path):打开图片Image.new(mode,size,color=0):新建图片,一般不用Image.fromarray(array,mode=None):将numpy数组转为图片,可以指定modeImage.frombytes(mode,size,data,coder_name='raw',**args):从字节流中读取图片,coder_name是解码器Image.convert(mode=None,matrix=None,dither=None,palette=0,colors=256):转换图像的格式,比如从灰度转换为RGBconvert('RGB')Image.crop(box):截取图像,box是一个元组(left,upper,right,lower),也就是相对于左上角(0,0)的像素值Image.draft(mode,size):返回一张缩略图,格式为mode,大小为size。也就是说,你可以将原始大图缩小到你给定的sizeImage.getbands():RGB图像返回('R','G','B'),灰度图像返回(L,),知道是什么了吗为了?Image.getbbox():比如一张512x512的图片会返回(0,0,512,512),分别是(left,upper,right,lower)Image.copy():复制图片Image.getextrema():返回最大值和最小值(0-255),如果是灰度图,返回所有值的最大值和最小值(min,max),如果是RGB图像,返回((Rmin,Rmax),(Gmin,Gmax),(Bmin,Bmax))Image.getpixel((x,y)):返回给定位置的像素值,灰度图是单个值,RGB图是一个一维数组Image.paste(im,box=None,mask=None):在图片上粘贴一张图片,box为粘贴位置,可以是(0,0)的元组,即从(left,top),或者(left,up,right,down),如果没有给出,默认为(0,0)。mask不知道是什么意思Image.putpixel((x,y),value):修改指定位置的像素值Image.resize(size,resample=None):resizetheimage,resample不知道是什么意思是Image.rotate(angle,resample=None,expand=None):旋转图片,expand表示是否展开图片显示所有内容,默认不展开,即旋转后的图片大小相同astheoriginalimageImage.save(fp,format=None):fp可以是文件名或者文件对象,一般只写文件名即可。format是保存图像的格式。默认情况下,根据文件名的后缀选择。Image.show():在屏幕上显示图像。Image.split():分割图像,如果是RGB,会分成R、G、B三幅图像。Image.thumbnail(size,resample=1):同Image.draftImage.transpose():旋转90度,同Image.rotate(90)Image.verify():判断图像是否损坏Image.close():关闭文件指针,一般有一些不需要的高级方法,那些基本用不到,想知道就看官方文档。最后,我正在学习一些机器学习算法。一些需要记录的内容我会分享到博客和微信公众号(python成长之路),欢迎关注。平时,我一般会分享一些爬虫或者Python的内容。