Pillow图像分离与合并

图像(指数字图像)由许多像素点组成,像素是组成图像的基本单位,而每一个像素点又可以使用不同的颜色,最终呈现出了绚丽多彩的图像。它们的本质就是图片呈现颜色时需要遵循的规则,比如 RGB、RGBA、CYMK 等,

而图像的分离与合并,指的就是图像颜色的分离和合并

Image 类提供了用于分离图像和合并图像的方法 split() 和 merge() 方法,通常情况下,这两个方法会一起使用。

split()分离操作
1
2
3
4
5
6
from PIL import Image
img = Image.open("D:\\File\\All\\web\\python\\blog\\947849.jpg")
r,g,b = img.split()
r.show()
g.show()
b.show()
merge()合并操作

Image 类提供的 merge() 方法可以实现图像的合并操作。

注意,图像合并,可以是单个图像合并,也可以合并两个以上的图像。merge() 方法的语法格式如下:

Image.merge(mode, bands)

参数说明如下:mode:指定输出图片的模式(前面文章博主有介绍)

bands:参数类型为元组或者列表序列,其元素值是组成图像的颜色通道,比如 RGB 分别代表三种颜色通道,可以表示为 (r,g,b)。

注意,该函数会返回一个新的 Image 对象

  1. 单个图像的合并指的是将颜色通道进行重新组合,从而得到不一样的图片效果,代码如下所示:
    1
    2
    3
    4
    5
    6
    from PIL import Image
    img = Image.open("D:\\File\\All\\web\\python\\blog\\947849.jpg")
    r,g,b = img.split()
    ing_merge= Image.merge('RGB', (g,b,r))
    ing_merge.save("D:\\File\\All\\web\\python\\blog\\4.jpg")
    ing_merge.show()
  2. 两张图片的合并操作也并不复杂,但是要求两张图片的模式、图像大小必须要保持一致,否则不能合并。因此,对于那些模式、大小不同的图片要进行预处理。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from PIL import Image
    img1 = Image.open("D:\\File\\All\\web\\python\\blog\\947849.jpg")
    img2 = Image.open("D:\\File\\All\\web\\python\\blog\\670099.jpg")
    img3 = img1.resize(img2.size)
    print(img3.size)
    r1,g1,b1 = img2.split()
    r2,g2,b2 = img3.split()
    img4 = Image.merge('RGB',(r1,g2,b1))
    img4.show()

一般不会将多张图片混合因为看起来怪怪的

扩展知识:blend() 混合图片

Image 类也提供了 blend() 方法来混合 RGBA 模式的图片(PNG 格式),函数的语法格式如下:
Image.blend(image1,image2, alpha)
参数说明如下:
image1,image2:表示两个 Image 对象,俩张图片的大小应该一样大

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

该函数会返回一个新的 Image 对象

与 RGB 模式相比,RGBA 在 RGB 的基础上增加了透明度,通过 Alpha 取值来决定两个图像的混合程度

1
2
3
4
5
6
from PIL import Image
img1 = Image.open("D:\\File\\All\\web\\python\\blog\\670099.png")
img2 = Image.open("D:\\File\\All\\web\\python\\blog\\99.png")
img4 = img2.resize(img1.size)
img3 = Image.blend(img1,img4,0.5)
img3.show()