发布时间:2021-07-31 00:35:56编辑:run阅读(3022)
使用PIL进行图片处理,PIL提供了许多图像处理的函数,使用点变换来更改像素值对图像实现几何变换
PIL模块安装
pip install pillow
创建缩略图,可以使用thumbnail()函数创建图像的缩略图
from PIL import Image im = Image.open(r'D:\image_processing\jpgs\cc.jpg') im_thumbnail = im.copy() im_thumbnail.thumbnail((100, 100)) im.paste(im_thumbnail, (10, 10)) im.save('D:\image_processing\jpgs\cc_1.jpg') im.show()
计算图像的基本统计信息,可以使用stat模块来计算一幅图像的基本统计信息(不同通道像素值的平均值,中值,标准差等)
from PIL import Image import PIL.ImageStat as stat im = Image.open(r'D:\image_processing\jpgs\cc.jpg') s = stat.Stat(im) # 取图像中每个通道的最大值和最小值 print(s.extrema) # 获取图像中每个通道的像素个数 print(s.count) # 获取图像中每个通道的像素值之和 print(s.sum) # 获取图像中每个通道的像素值平方之和 print(s.sum2) # 获取图像中每个通道的像素值的平均值 print(s.mean) # 获取图像中每个通道的像素值的中值 print(s.median) # 获取图像中每个通道的像素值的均方根值,均方根值,也称方均根值或有效值, # 它的计算方法是先平方、再平均、然后开方 print(s.rms) # 获取图像中每个通道的像素值的方差值。方差(variance)是在概率论和统计方差衡量随机变量 # 或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。 # 统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数 print(s.var) # 获取图像中每个通道的像素值的标准差值。标准差也被称为标准偏差, # 标准差(Standard Deviation)描述各数据偏离平均数的距离(离均差)的平均数, # 它是方差平方和平均后的方根,用σ表示。标准差是方差的算术平方根。 # 标准差能反映一个数据集的离散程度,标准偏差越小,这些值偏离平均值就越少, # 反之亦然。标准偏差的大小可通过标准偏差与平均值的倍率关系来衡量 print(s.stddev)
绘制图像RGB通道像素值的直方图,histogram()函数可用于计算每个通道像素的直方图(像素值与频率表),并返回相关关联的输出-对于RGB图像,输出包含3x256=768个值
from PIL import Image import matplotlib.pylab as plt im = Image.open(r'D:\image_processing\jpgs\cc.jpg') pl = im.histogram() plt.bar(range(256), pl[:256], color='r', alpha=0.5) plt.bar(range(256), pl[256:2*256], color='g', alpha=0.4) plt.bar(range(256), pl[2*256:], color='b', alpha=0.3) plt.show()
RGB三色直方图
分离图像的RGB通道,可以用split()函数来分离多通道图像的通道,对RGB图像实现RGB通道分离
from PIL import Image import matplotlib.pylab as plt im = Image.open(r'D:\image_processing\jpgs\cc.jpg') ch_r,ch_g,ch_b = im.split() plt.figure(figsize=(18,6)) plt.subplot(1,3,1);plt.imshow(ch_r,cmap=plt.cm.Reds);plt.axis('off') plt.subplot(1,3,2);plt.imshow(ch_r,cmap=plt.cm.Greens);plt.axis('off') plt.subplot(1,3,3);plt.imshow(ch_r,cmap=plt.cm.Blues);plt.axis('off') plt.tight_layout() plt.show()
合并图像的多个通道。可以使用merge()函数合并多通道图像的通道
将上面拆分出来的3种颜色通道合并
from PIL import Image im = Image.open(r'D:\image_processing\jpgs\cc.jpg') ch_r,ch_g,ch_b = im.split() im_1 = Image.merge('RGB', (ch_r,ch_g,ch_b)) im_1.show()
又会得到原始图像
两幅图像的a-混合。blend()函数可将一个常量a插入两个给定的图像大小相同,从而创建一个新的图像,两个图像的大小和模式必须相同。
公式:out=(1.0-a)*image1+a*image2
如果a为0.0,则返回第一个图像的副本;如果a为1.0则返回第二个图像的副本
from PIL import Image import matplotlib.pylab as plt im1 = Image.open(r'D:\image_processing\jpgs\cc.jpg') im2 = Image.open(r'D:\image_processing\jpgs\cc_bei.jpg') im1 = im1.convert('RGB') im2 = im2.resize((im1.width, im1.height), Image.BILINEAR) im = Image.blend(im1, im2, alpha=0.5) plt.subplot(221), plt.imshow(im1), plt.title('原图', size=20),plt.axis('off') plt.subplot(222), plt.imshow(im2), plt.title('背景图', size=20),plt.axis('off') plt.subplot(223), plt.imshow(im), plt.title('合成图', size=20),plt.axis('off') plt.show()
上一篇: python3-PIL图像实战2
下一篇: python3-PIL图像实战4
47745
46237
37110
34627
29229
25886
24745
19863
19417
17909
5716°
6315°
5836°
5888°
6985°
5829°
5846°
6361°
6316°
7673°