问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

图像处理库Pillow(PIL)的使用-2(实例+详细注释+图片脚本)

创作时间:
作者:
@小白创作中心

图像处理库Pillow(PIL)的使用-2(实例+详细注释+图片脚本)

引用
CSDN
1.
https://m.blog.csdn.net/qq_67581528/article/details/144632557

pillow的使用篇

  • 图像处理库Pillow(PIL)的使用-1(实例+详细注释+图片脚本)
  • 图像处理库Pillow(PIL)的使用-2(实例+详细注释+图片脚本)
  • 图像处理库Pillow(PIL)的使用-3(实例+详细注释+图片脚本)

图片脚本篇

  • python图片脚本1-批量处理图片尺寸(详细注释+GUI界面+exe可执行文件)
  • python图片脚本2-图片文件批量命名(详细注释+GUI界面+exe可执行文件)
  • python图片脚本3-批量图片格式转换-(详细注释+GUI界面+exe可执行文件)
  • python图片脚本4-批量图片加水印(详细注释+GUI界面+exe可执行文件)

pillow库的使用

图片的保存

图片的保存主要有两种方法,分别是Image模块中的save方法和convert()方法,下面分别对他们进行介绍:

save()

Image模块中的save()方法用于保存图片,保存图片时,名称变的很重要,如果指定了图片格式,则会以指定的格式存储图片,如果不指定格式,它会以默认的图片格式来存储。

语法格式如下:

Image.save(fp,format=None,**params)

参数:

  • fp:图片存储路径(filepath)的缩写,字符串格式
  • format:可选参数,指定图片的格式
  • **params:其他可选参数,如quality参数可以控制图片质量等等

示例:

from PIL import Image #导入Image图像处理模块
#创建一个Image对象
image = Image.open('1.jpeg')
#保存图片,指定格式为png
image.save('1.png', 'png')
#如果format参数和前面不一致,以前面为主,下面就保存为1.jpg
image.save('1.jpg', 'png')

convert()

convert() 方法用于将图片转换为不同的模式,最后再用save保存

语法如下:

convert(mode,**params)

参数:

  • mode:要转换的图像模式
  • **params:其他可选参数 ,例如matrix转换矩阵等等

示例如下:

from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image = Image.open('1.jpeg')
# convert()方法将图像转换为RGB模式
image.convert('RGB')
# 保存图像
image.save('1_rgb.jpeg')

图片的缩放

在图像处理过程中经常会遇到缩小或放大图像的情况,Image 类提供的 resize() 方法能够实现任意缩小和放大图像。

resize()

resize()可以实现图片的缩放效果,它返回一个新的Image对象,该对象具有指定的尺寸。原始图像不会被修改。

语法如下:

resize(size,resample=NEAREST,box=None)

参数解释:

  • size:二元组(width,height),指定新的图片的宽度和高度
  • resample:可选参数,用于指定在调整图像大小时使用的重采样滤波器
  • box:可选参数,指定要调整的图像的原始区域,是一个四元组(left,upper,right,lower),未指定则默认缩放整个图像

示例如下:

from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image2 = Image.open('1.jpg')
print(f"原始图像大小: {image2.size}")
# 调整图片为600x600,并裁剪为100x100-400x300的区域
image2 = image2.resize((600, 600),box=(100,100,400,300))
# 显示图片
image2.show()
print(f"调整后图像大小: {image2.size}")

输出:

原始图像大小: (474, 325)
调整后图像大小: (600, 600)

图像的分离与合并

图像由许多像素点组成,像素是组成图像的基本单位,而每一个像素点又可以使用不同的颜色,图像的分离与合并指的就是图像颜色的分离与合并

spilt()

split() 方法用于将图像分离成其各个颜色通道。适用于处理多通道图像,比如RGB图像(红、绿、蓝三个通道)或RGBA图像(红、绿、蓝、透明度四个通道)。

示例如下:

from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image = Image.open('images/bg.jpg')
# 分离颜色通道
r, g, b = image.split()
# 分别保存三个通道的图片
r.save('images/red.png')
g.save('images/green.png')
b.save('images/blue.png')
# 分别显示三个通道的图片
r.show('images/red.png')
g.show('images/green.png')
b.show('images/blue.png')

输出:



原图为:

meige()

Image 类提供的 merge() 方法可以实现图像的合并操作。注意,图像合并,可以是单个图像合并,也可以合并两个以上的图像。该函数也是返回一个Image对象

语法格式如下:

Image.merge(mode,bands)

参数:

  • mode:指定输出图片的模式
  • bands:参数类型为元组或者列表,其元素值是组成图像的颜色通道,比如 RGB 分别代表三种颜色通道,可以表示为 (r,g,b)

示例:

from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image = Image.open('images/bg.jpg')
# 分离颜色通道
r, g, b = image.split()
# 合并三个通道的图片,注意通道顺序不同,图片颜色不同,比如下面是grb,如果是rgb就会合成原图颜色
merged = Image.merge('RGB', (g, r, b))
# 显示合并后的图片
merged.show()

输出:

另外和并图片需要两张图片的模式和图像大小一样,否则不能合并。因此,对于那些模式、大小不同的图片要进行预处理。

blend()

Image 类也提供了 blend() 方法来实现图片的叠加,语法如下:

Image.blend(iamge1,image2,aipha)

参数解释:

  • image1,image2:表示两个 Image 对象。
  • alpha:表示透明度,取值范围为 0 到 1,当取值为 0 时,输出图像相当于 image1 的拷贝,而取值为 1 时,则是 image2 的拷贝,只有当取值为 0.5 时,才为两个图像的中合。因此改值的大小决定了两个图像的混合程度。

示例:

from PIL import Image # 导入Image图像处理模块
# 实例化两个Image对象,resize()调整图片大小一致
im1 = Image.open('./images/bg.jpg').resize((500, 500))
im2 = Image.open('./images/1.jpg').resize((500, 500))
# 叠加图片
result = Image.blend(im1, im2, 0.5)
# 显示叠加后的图片
result.show()

输出:

图像的裁剪

图像的剪裁、复制、粘贴是图像处理过程中经常使用的基本操作,Pillow Image 类提供了简单、易用的 API 接口,能够帮助您快速实现这些简单的图像处理操作。

crop()

Image 类提供的 crop() 函数允许我们以矩形区域的方式对原图像进行裁剪,crop() 方法会返回一个 Image 对象语法格式如下:

crop(box=None)

box:表示裁剪区域,指定要裁剪的图像的原始区域,是一个四元组(x1,y1,x2,y2),表示图像的起始左上角和结束右下角的坐标,默认为 None,表示拷贝原图像

示例:

from PIL import Image # 导入Image图像处理模块
# 实例化一个Image对象
im = Image.open('./images/bg.jpg')
# 裁剪图片
cropped = im.crop((100, 100, 600, 400))
# 显示裁剪后的图片
cropped.show()

输出:

图像的几何变换

图像的几何变换主要包括图像翻转、图像旋转和图像变换操作,Image 类提供了处理这些操作的函数 transpose()、rotate() 和 transform(),下面分别对它们进行讲解。

transpose()

该函数可以实现图像的垂直、水平翻转,语法格式如下:

Image.transpose(method)

method 参数决定了图片要如何翻转,参数值如下:

  • Image.FLIP_LEFT_RIGHT:左右水平翻转;
  • Image.FLIP_TOP_BOTTOM:上下垂直翻转;
  • Image.ROTATE_90:图像旋转 90 度;
  • Image.ROTATE_180:图像旋转 180 度;
  • Image.ROTATE_270:图像旋转 270 度;
  • Image.TRANSPOSE:图像转置;
  • Image.TRANSVERSE:图像横向翻转。

示例:

# 图像的几何变换
from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象
image = Image.open('images/bg.jpg')
# 图像旋转90度
im2 = image.transpose(Image.ROTATE_90)
# 图像水平翻转
im3 = image.transpose(Image.FLIP_LEFT_RIGHT)
# 显示图像
im2.show()
im3.show()

输出:


rotate()

rotate()方法可以把图像旋转任意角度,语法格式如下:

Image.rotate(angle, resample=PIL.Image.NEAREST, expand=None, center=None, translate=None, fillcolor=None)

参数解释:

其中第一个为必选参数,其余为可选

  • angle:旋转的角度
  • resample:重采样滤波器
  • expand:布尔值,用于确定是否扩展输出图像以容纳整个旋转后的图像
  • center:旋转中心
  • translate:旋转后的平移量
  • fillcolor:填充颜色

示例

from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象(宽高为500x500,背景色为米色)
im5 = Image.new('RGBA', (500, 500), "beige")
# 旋转45度
im_ratate = im5.rotate(45)
# 显示图像
im_ratate.show()

输出:

transform()

该函数能够对图像进行变换操作,通过指定的变换方式,产生一张规定大小的新图像,语法格式如下:

Image.transform(size, method, data=None, resample=0)

参数解释:

  • size:指定新图片的大小;
  • method:指定图片的变化方式,
  • data:该参数用来给变换方式提供所需数据;
  • resample:图像重采样滤波器

示例:

from PIL import Image # 导入Image图像处理模块
# 创建一个Image对象(宽高为500x500,背景色为米色)
im5 = Image.new('RGBA', (500, 500), "beige")
# 设置图像尺寸为300x300,图片的变换方式为EXTENT,变换后的图片的位置为(0,0)到(500,500)
im6 = im5.transform((300, 300), Image.EXTENT, (0, 0, 500, 500))
# 显示图像
im6.show()

输出:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号