搜索
简帛阁>技术文章>python—PIL图像操作(一)

python—PIL图像操作(一)

目录

打开和新建图像文件

打开图像

新建图像

混合

透明度混合

遮罩混合

复制和缩放

复制图像

縮放像素(按像素缩放)

缩放图像(按尺寸大小缩放)

粘贴和裁剪

裁剪

粘贴

图像旋转

格式转换

covert()

transpose()

分离和合并

Image库其他内置函数


打开和新建图像文件

通过使用Image模块,可以从文件中加载图像,或者处理其他图像,或者从scratch中创建图像。在对图像进行处理时,首先需要打开要处理的图片。在Image模块中使用函数open()打开一副图片,执行后返回Image类的实例。当文件不存在时,会引发IOError错误。

打开图像

打开图像使用函数open()语法格式:open(fp,mode)

  • fp:打开文件的路径
  • mode:可选参数,表示打开文件的方式,通常使用默认值r
from PIL import Image

img1 = Image.open('./poo/1.jpg')  # 打开图片

img1.show()  # 显示图片

print('图片格式:', img1.format)
print('图片大小:', img1.size)
print('图片宽度:', img1.width)
print('图片高度:', img1.height)
print('获取指定位置的像素:', img1.getpixel((200, 260)))  # 参数为坐标点的元组,返回结果为一个RGB值元组

新建图像

new(mode,size,color =0)

  • mode:图片模式
  • size:图片尺寸,使用宽和高两个元素构成的元组
  • color:默认颜色(黑色)
img2 = Image.new(mode='RGB', size=(img1.size), color='yellow')  # 创建一个与img1同样大小的图片

混合

透明度混合

使用函数blend()实现透明度混合处理。语法格式:blend(im1,im2,alpha)

  • im1、im2:参与混合的图片1和图片2
  • alpha:混合透明度,取值是0-1

通过使用函数blend()可以将im1和im2这两幅图片(尺寸相同)以一定的透明度进行混合。具体混合过程:(im1*(1-alpha)+ im2*alpha)。当混合透明度为0时,显示im1原图。当混合透明度alpha取值为1时,显示im2 原图片。

from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
img2 = Image.new(mode='RGB', size=(img1.size), color='yellow')  # 创建一个与img1同样大小的图片
Image.blend(img1, img2, .3).show()  # 透明度混合处理

遮罩混合

使用函数composite()实现遮罩混合处理。语法格式:composite(im1,im2,mask)

  • iml、im2:混合处理的图片1和图片2
  • mask:也是一个图像
  • mode:可以为“1”,“L"或“RGBA”,并且大小要和im1、im2一样

函数composite()的功能是使用mask来混合图片im1和im2,并且要求mask、im1和im2三幅图片的尺寸相同。

from PIL import Image
im1 = Image.open('./poo/1.jpg')
im2 = Image.open('./poo/2.jpg')
im2.resize(im1.size)  # 将im2的图片大小修改成与im1相同
r, g, b = im2.split()  # 将im2的图片rgb通道切割
Image.composite(im1, im2, g).show()  # 用im2中的g通道对im1进行遮罩

复制和缩放

复制图像

使用函数Image.copy()复制指定的图片,可以用于在处理或粘贴时需要持有源图片

縮放像素(按像素缩放)

使用函数eval()实现像素缩放处理,能够使用函数fun()计算输入图片的每个像素并返回。使用函数eval()语法格式:eval(image,fun)。其中image表示输入的图片,fun()表示给输入图片的每个像素应用此函数,fun()函数只允许接收一个整型参数。如果一个图片含有多个通道,则每个通道都会应用这个函数。

from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
Image.eval(img1, lambda i: i * 0.5).show()  # 按照像素缩放,可以达到增加或减少曝光的效果

缩放图像(按尺寸大小缩放)

使用函数thumbnail()原生地缩放指定的图像,语法格式:Image.thumbnalsizeresample-3)

from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
img1.thumbnail(size=(500, 300))  # 按照尺寸大小缩放
img1.show()

粘贴和裁剪

裁剪

使用函数crop()可以剪切图片中box所指定的区域, 语法:img.crop(box = None)

参数box是一个四个值得元组,分别定义了剪切区域的左、上、右下4个坐标。

im1 = Image.open('./poo/5.jpg')
im_crop = im1.crop((50, 50, 500, 300))  # 裁剪
im_crop.show()

粘贴

使用函数paste()可以粘贴源图像或像素至该图像中。

语法格式:Image.paste(im,box=Nonemask=None),其中im是源图或像素值; box 是粘贴的区域; mask 是遮罩。参数box可以分为以下3中情况。

1. (x1y1) :将源图像左上角对齐(x1,y1)点,其余超出被粘贴图像的区域被抛弃。

2. (x1,y1,x2,y2) :源图像与此区域必须一致。

3.None:源图像与被粘贴的图像大小必须一致。

im1 = Image.open('./poo/5.jpg')
im2 = Image.open('./poo/6.jpg')
im_crop = im1.crop((50, 50, 500, 300))  # 裁剪
im2.paste(im_crop, (10, 20))  # 图片黏贴
im2.show()

图像旋转

使用函数rotate()可以返回此图像的副本,围绕其中心逆时针旋转给定的度数Image.rotate()

from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
img1.rotate(90).show()  # 图片的旋转

格式转换

covert()

使用函数convert()返回模式转换后的图像实例。

convert(self, mode=None, matrix=None, dither=None, palette=WEB, colors=256)

  • mode:转换文件的模式,模式有“L”、“RGB”“CMYK”;
  • matrix:旋转使用的矩阵;
  • dither:取值为None切转为黑白图时非0 (1-255)像素均为白,也可以设置此参数为FLOYDSTEINBERG。
from PIL import Image
img1 = Image.open('./poo/1.jpg')
img1.convert('L').show()

transpose()

函数transpose()实现图像格式的转换。Image. transpose(method)

转换图像后,返回转换后的图像,“method” 的取值有以下几个。

  1.  PIL.Image.FLIP_LEFT_RIGHT:左右镜像
  2.  PIL.Image.FLIP_TOP_BOTTOM :上下镜像
  3.  PIL.Image.ROTATE_90:旋转90
  4.  PlL.Image.ROTATE_180: 旋转180
  5.  PIL.Image.ROTATE_270: 旋转270
  6.  PIL.Image.TRANSPOSE :颠倒顺序
from PIL import Image
img1 = Image.open('./poo/1.jpg')  # 打开图片
img1.transpose(Image.FLIP_LEFT_RIGHT).show()  # 左右镜像
img1.transpose(Image.FLIP_TOP_BOTTOM).show()  # 上下镜像
img1.transpose(Image.ROTATE_90).show()  # 旋转90度

分离和合并

分离:使用函数split()可以将图片分割为多个通道列表。

合并:使用函数merge()可以将一个通道的图像合并到更多通道图像中。语法格式如下所示:

Image.merge(mode,bands),其中mode指输出图像的模式,bands波段通道,一个序列包含单个带图通道。

from PIL import Image

img1 = Image.open('./poo/1.jpg') 
img2 = Image.open('./poo/2.jpg')
img2 = img2.resize(img1.size)
r1, g1, b1 = img1.split()
r2, g2, b2 = img2.split()
img = Image.merge('RGB',(r2,g1,b2))
img.show()

Image库其他内置函数

常用的属性

  1. Imageformat: 源图像格式
  2. Image.mode:图像模式字符串
  3. Image.size:图像尺寸

常用的内置函数

  1. Image.getbands(): 获取图像每个通道的名称列表,例如RGB图像返回['R'G';B']。
  2. Image.getextrema():获取图像最大、最小像素的值。
  3. Image.getpixel(xy):获取像素 点值。
  4. Image.histogram(mask=None,extrema=None):获取图像直方图,返回像素计数的列表。
  5. Image.point(function):使用函數修改图像的每个像素。
  6. Image.putalpha(alpha):添加或替换图像的alpha层。
  7. Image.save(fp,format=None,**params):保存图片。
  8. Image.show(title=None,command=None): 显示图片。
  9. Image.transform(size ,method,data=None,resample=0.fill= 1):变换图像。
  10. Image.verify():校验文件是否损坏。
  11. Image.close():关闭文件。
目录打开和新建图像文件打开图像新建图像混合透明度混合遮罩混合复制和缩放复制图像縮放像素(按像素缩放)缩放图像(按尺寸大小缩放)粘贴和裁剪裁剪粘贴图像旋转格式转换covert()transpose()
Image模块是PIL中最重要的模块,它有一个类叫做image,与模块名称相同。Image类有很多函数、方法及属性,接下来将依次对image类的属性、函数和方法进行介绍。、Image类的属性1、Fo
pythonPIL图像处理图像手绘效果黑白灰色边界线条较重处理图像PIL库pipinstallpillowfromPILimportImage//RGB二维矩阵importnumpyasnpimnp
PIL库对图像的基本操作1、读取图片PIL网上有很多介绍,这里不再讲解。直接操作,读取一张图片,将其转换为灰度图像,并打印出来。fromPILimportImageimportmatplotli
PIL全称PythonImageLibrary,是python官方的图像处理库,包含各种图像处理模块。Pillow是PIL的一个派生分支,包含与PIL相同的功能,并且更灵活。python30之后,P
fromPILimportImagefromPILimportImageEnhanceimImageopen(d://aajpg,r)print(imsize,imformat,immode)显示图的
我就废话不多说了,大家还是直接看代码吧!importPILImageimportnumpyimportosimportshutildefsum_right(path):img=PILImageopen
图像处理Pillow扩展库下载pipinstallpillowPIL是python常用的图像处理库,功能非常强大,API简单易用Pillow提供了广泛的文件格式支持,强大的图像处理能力,主要包括图像
目录前言&127826;PIL库概述&127827;Image类解析&128154;图像的创建&128153;图像的属性&128156;图像的转换&128151;图像处理总结前言提示:以下是本篇文章
在学习python图像处理时,傻傻的分不清PIL和Pillow,于是简单整理一下二者区别。、PILPIL全称是:PythonImagingLibrary。PIL是一个强大的、方便的python图像