>>> from env_helper import info; info()
页面更新时间: 2024-04-06 23:05:07
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
3.4. 使用 Pillow 处理图像:通道¶
3.4.1. 分离和合并通道¶
Pillow 允许处理图像的各个通道,例如RGB图像有R、G、B三个通道。 RGB
意思是红色、绿色、蓝色,有的图像会有R、G、B、A四个通道, A
是Alpha的首字母,是指一张图片的透明和半透明度。 split()
方法分离图像通道,如果图像为单通道则返回图像本身。 merge
函数采用图像的 mode
和 通道元组为参数,将它们合并成新图像。
>>> from PIL import Image
>>> im=Image.open('L1020120.JPG')
>>> print(im.mode)
RGB
将通道分离为R,G,B,A
>>> # r, g, b ,a= im.split()
将通道分离为R,G,B
>>> r,g,b = im.split()
将三个颜色打乱后合并显示。
>>> from matplotlib import pyplot as plt
>>> im = Image.merge("RGB", (b, g, r))
>>> plt.imshow(im)
>>> plt.show()
下面处理交换RGB图像的三个波段,需要注意的是, 如果你的图片是RGBA那么会出现异常,解决方法将图片转换为RGB:
Image.open(image_path).convert("RGB").save(outfile)
>>> Image.open('L1020120.JPG').convert("RGBA").save('./img3_3.png')
>>> im=Image.open('./img3_3.png')
>>> print(im.mode)
>>> plt.imshow(im)
>>> plt.show()
RGBA
3.4.2. 处理单独通道颜色¶
将RGB进行单独处理
>>> source = im.split()
>>> R, G, B = 0, 1, 2
过滤红色通道
>>> mask = source[R].point(lambda i: i < 100 and 255)
过滤绿色通道
>>> out = source[G].point(lambda i: i * 0.7)
粘贴已处理的通道,红色通道仅限于<100的值
>>> source[G].paste(out, None, mask)
>>> im = Image.merge(im.mode, source)
>>> plt.imshow(im)
>>> plt.show()