感谢优秀的你打开了小白的文章
“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”
目录
前言
库的安装
基础认识
图像的 RGB 色彩模式
像素阵列
图像的打开
图片混合
遮罩混合处理
缩放像素
Pillow 是 Python Imaging Library的简称,是 Python 语言中最为常用的图像处理库。Pillow 库提供了对 Python3 的支持,为 Python3 解释器提供了图像处理的功能。通过使用 Pillow 库, 可以方便地使用 Python 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。
Pillow 库是 Python 开发者最为常见的图像处理库,它提供了广泛的文件格式支持、强 大的图像处理能力,主要包括图像存储、图像显示、格式转换以及基本的图像处理操作等。
pip 安装 pillow,执行如下命令 :
pip install pillow
RGB 三个颜色通道的变化和叠加得到各种颜色,其中 - R 红色,取值范围,0-255 - G 绿色,取值范围,0-255 - B 蓝色,取值范围,0-255 比如,我们常见的黄色就是由红色和绿色叠加而来。
红色的 RGB 表示(255,0,0)
绿色的 RGB 表示(0,255,0)
蓝色的 RGB 表示(0,0,255)
黄色的 RGB 表示(255,255,0)
数字图像可以看成一个整数阵列,阵列中的元素称为像素(Pixel),见下图的数字阵列 每个点代表 1 个像素(Pixel),一个点包含 RGB 三种颜色。也就是 1 个像素包含 3 个字节的 信息:(R,G,B)。假如这个像素是红色,则信息是:(255,0,0)。那么,理论上我们只要 操作每个点上的这三个数字,就能实现任何的图形。一幅图像上的所有像素点的信息就完全 可以采用矩阵来表示,通过矩阵的运算实现更加复杂的操作
from PIL import Image
#打开图片
img=Image.open('p1.jpg')
#显示图片
img.show()
print('图片的格式:',img.format)
print('图片的大小:',img.size)
print('图片的高度:',img.height,'图片的宽度:',img.width)
print('获取(100,100)处像素值:',img.getpixel((100,100)))
返回值可以是图片格式,大小,高度等等。
透明度混合处理在 Pillow 库的 Image 模块中,可以使用函数 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('p2.jpg').convert(mode='RGB')
img2=Image.new('RGB',img1.size,'red')
# img2.show()
Image.blend(img1,img2,alpha=0.5).show()
在 Pillow 库中 Image 模块中,可以使用函数 composite()实现遮罩混合处理。
具体语法格式如下:
composite(im1,im2,mask)
其中 im1 和 im2 表示混合处理的图片 1 和图片 2.mask 也是一个图像,mode 可以为 “1”, “L”, or “RGBA”,并且大小要和 im1、im2 一样。 函数 composite()的功能是使用 mask 来混合图片 im1 和 im2,并且要求 mask、im1 和 im2 三幅图片的尺寸相同。下面的实例代码演示了使用 Image 模块实现图片遮罩混合处理的过程。
from PIL import Image
img1=Image.open('p4.jpg')
img2=Image.open('p3.jpg')
img2=img2.resize(img1.size)
r,g,b=img2.split()
Image.composite(img2,img1,r).show()
我们先看看原图:
运行后结果展示:
在 Pillow 库的 Image 模块中,可以使用函数 eval()实现像素缩放处理,能够使用函 数 fun()计算输入图片的每个像素并返回。使用函数 eval()语法格式如下:
eval(image,fun)
其中 image 表示输入的图片,fun 表示给输入图片的每个像素应用此函数,fun()函数 只允许接收一个整型参数。如果一个图片含有多个通道,则每个通道都会应用这函数。
from PIL import Image
#按像素缩放图片
img1= Image.open('p3.jpg')
img1.show()
#.将每个像素都扩大2倍
Image.eval(img1,lambda x:x*2).show()
#按尺寸进行缩放图片
#复制图片
img2=img1.copy()
print(img2.size)
img1.show()
img2.thumbnail((200,160))
img2.show()
运行结果对比:
在公众号回复“图像处理”可获得所有代码: