✨✨✨
感谢优秀的你打开了小白的文章
“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”
目录
往期回顾
前言
Pillow库的安装
图像处理之滤镜
Image 模块内置函数和属性
ImageFilter 模块
小实例1 对图片进行模糊操作
ImageFilter 中常用的自定义滤镜函数
小实例2
ImageChops模块
实例运用一
其他函数
ImageEnhance模块使用
运用-使用 ImageEnhance 实现图像色彩平衡
运用-使用 ImageEnhance 实现图像亮度
最后
图像的基本处理(一) | (1条消息) 图像基本处理(一)_am_student的博客-CSDN博客 |
图像的基本处理(二) | (1条消息) 图片的基本处理(二)_am_student的博客-CSDN博客 |
图像的基本处理(三) | (1条消息) 图像的基本处理(三)_am_student的博客-CSDN博客 |
Pillow 是 Python Imaging Library的简称,是 Python 语言中最为常用的图像处理库。Pillow 库提供了对 Python3 的支持,为 Python3 解释器提供了图像处理的功能。通过使用 Pillow 库,可以方便地使用 Python 程序对图片进行处理,例如常见的尺寸、格式、色彩、旋转等处理。
Pillow 库是 Python 开发者最为常见的图像处理库,它提供了广泛的文件格式支持、强大的图像处理能力,主要包括图像存储、图像显示、格式转换以及基本的图像处理操作等。
pip 安装 pillow,执行如下命令 :
pip install pillow
在 Pillow 库中的 Image 模块中,使用函数 filter()可以对指定的图片使用滤镜效果,在 Pillow 库中可以用的滤镜保存在 ImageFilter 模块中。使用函数 filter()的语法格式如下所示:
Image.filter(filter)
通过函数 filter(),可以使用给定的滤镜过虑指定的图像,参数“filter”表示滤镜内核。
1. Image.format:源图像格式
2. Image.mode:图像模式字符串
3. Image.size:图像尺寸
4. Image.getbands():获取图像每个通道的名称列表,例如 RGB 图像返回[‘R’,’G’,’B’]。
5. Image.getextrema():获取图像最大、最小像素的值。
6. Image.getpixel(xy):获取像素点值。
7. Image.histogram(mask=None,extrema=None):获取图像直方图,返回像素计数的列表。
8. Image.point(function):使用函数修改图像的每个像素。
9. Image.putalpha(alpha):添加或替换图像的 alpha 层。
10. Image.verify():校验文件是否损坏。
11. Image.close():关闭文件
12. Image.save(fp,format=None,**params):保存图片。
13. Image.show(title=None,command=None):显示图片。
14. Image.transform(size,method,data=None,resample=0,fill=1):变换图像。
内置模块 ImageFilter 实现了滤镜功能,可以用来创建图像特效,或以此效果作为媒介实现进一步处理。 在模块 ImageFilter 中,提供了一些预定义的滤镜和自定义滤镜函数。其中最为常用的预定义滤镜如下所示:
BLUE:模糊
CONTOUR:轮廓
DETAIL:详情
EDGE_ENHANCE:边缘增强
EDGE_ENHANCE_MORE:边缘增强
EMBOSS:浮雕
FIND_EDGES:寻找边缘
SHARPEN:锐化
SMOOTH:平滑
from PIL import Image,ImageFilter
img=Image.open('p2.jpg')
w,h=img.size
#创建一个图像
img_output=Image.new('RGB',(2*w,h))
img_output.paste(img,(0,0))
img_filter=img.filter(ImageFilter.GaussianBlur)
img_output.paste(img_filter,(w,0))
img_output.show()
结果对比展示:
ImageFilter.GaussianBlur(radius = 2 ) 高斯模糊
ImageFilter.UnsharpMask(radius = 2,percent = 150,threshold = 3 ) 不清晰的掩模滤镜 ImageFilter.MinFilter(size = 3 ) 最小值滤波
ImageFilter.MedianFilter(size = 3 ) 中值滤波
ImageFilter.ModeFilter(size = 3 ) 模式滤波
from PIL import Image,ImageFilter
img=Image.open('p2.jpg')
w,h=img.size
#创建一个图像
img_output=Image.new('RGB',(2*w,h))
img_output.paste(img,(0,0))
filters=[]
img_filter1=img.filter(ImageFilter.GaussianBlur) #高斯滤镜
img_filter2=img.filter(ImageFilter.EDGE_ENHANCE) #边缘增强滤镜
img_filter3=img.filter(ImageFilter.FIND_EDGES) #寻找边缘滤镜
filters.append(img_filter1)
filters.append(img_filter2)
filters.append(img_filter3)
for img_filter in filters:
img_output.paste(img_filter,(w,0))
img_output.show()
结果对比展示
边缘增强滤镜:
在 Pillow 库的内置模块 ImageChops 中包含了多个用于实现图片合成的函数。
这些合成功能是通过计算通道中像素值的方式来实现的。
其主要用于制作特效、合成图片等操作。常用的内置函数如下所示:
(1)相加函数 add(),功能是对两张图片进行算术加法运算。语法如下所示:
ImageChops.add(image1,image2,scale = 1.0,offset = 0 )
在合成后图像中的每个像素值,是两幅图像对应像素值依据下面的公式进行计算得到的。
out = ((image1 + image2) / scale
(2)减法函数 subtract(),功能是对两张图片进行算术减法运算。语法如下所示:
ImageChops.subtract(image1,image2,scale = 1.0,offset = 0 )
在合成后图像中的每个像素值,是两幅图像对应像素值依据下面的公式进行得到的。
out = ((image1 - image2) / scale + offset
我们先看看原图片,图片一定选好,不然修出来的图片不忍直视。
from PIL import Image,ImageChops
#打开图片
img1=Image.open('p2.jpg')
img2=Image.open('p3.jpg')
#对两张图片进行算术加法运算
ImageChops.add(img1,img2).show()
#对两张图片进行算术减法运算
ImageChops.subtract(img1,img2).show()
结果展示:
加法运算:有点复古感的感觉了昂
减法运算:有点电影感了昂
(3)变暗函数 darker(),功能是比较两个图片的像素,取两张图片中对应像素的较小值,所以合成时两幅图像中对应位置的暗部分得到保留,而去除亮部分。
具体语法如下所示:
ImageChops.darker(image1,image2 )
像素的计算公式如下所示:
out = min(image1, image2)
运用1:
from PIL import Image,ImageChops
#打开图片
img1=Image.open('p2.jpg')
img2=Image.open('p3.jpg')
#使用darker()函数
ImageChops.darker(img1,img2).show()
(4)变亮函数 lighter(),与变暗函数 darker()相反,功能是比较两个图片(逐像素比较), 返回一幅新的图片,这幅新的图片是将两张图片中较亮的部分叠加得到的。也就是说,在某 一点上,两张图中哪个的值大(亮)则取之。具体语法如下所示:
ImageChops.lighter(image1,image2 )
函数 lighter()与函数 darker()的功能相反,计算后得到的图像是两幅图像对应位置的亮部分。 像素的计算公式如下所示:
out = max(image1,image2)
运用2:
from PIL import Image,ImageChops
#打开图片
img1=Image.open('p2.jpg')
img2=Image.open('p3.jpg')
#变亮函数lighter()函数
ImageChops.lighter(img1,img2).show()
这个效果蛮好的哈。
(5)叠加函数 multiply(),功能是将两张图片互相叠加。
如果用纯黑色与某图片进行叠加操作,就会得到一幅纯黑色的图片。
如果用纯白色与图片作叠加,则图片不受影响。具体语法
ImageChops.multiply(image1,image2 )
合成的图像的效果类似两张图片在透明的描图纸上叠放在一起观看的效果。其对应像素的计 算公式如下所示:
out = image1 * image2 / MAX
运用三 :
from PIL import Image,ImageChops
#打开图片
img1=Image.open('p3.jpg')
img2=Image.open('p2.jpg')
#两张图片相互叠加multiply
ImageChops.multiply(img1,img2).show()
结果:
(6)屏幕函数 screen(),功能是先反色后叠加,实现合成图像的效果,就像将两张幻灯片用 两台投影机同时投影到一个屏幕上的效果。具体语法如下所示:
ImageChops.screen(image1,image2 )
其对应像素的计算公式如下所示:
out = MAX - ((MAX - image1) * (MAX - image2) / MAX
视觉疲劳了,换图!
from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('p1.jpg')
imgb=Image.open('p4.jpg')
#实现反色后叠加
ImageChops.screen(imga,imgb).show()
运行结果:意境感噌噌的上来了。
(7)反色函数 invert(),类似于集合操作中的求补集,最大值为 Max,每个像素做减法,取 出反色。在反色时将用 255 减去一幅图像的每个像素值,从而得到原来图像的反相。也就是 说,其表现为“底片”性质的图像。具体语法如下所示:
ImageChops.invert(image)
其对应像素的计算公式如下所示:
out = MAX - image
运用4 不推荐使用昂,除非想看女朋友的骨头
from PIL import Image,ImageChops
#打开图片
img1=Image.open('p3.jpg')
img2=Image.open('p2.jpg')
#反色invert()
ImageChops.invert(img1).show()
运行结果展示;
(8)比较函数 difference(),可以逐像素做减法操作,计算出绝对值。函数 difference()能够 两幅图像的对应像素值相减后的图像,对应像素值相同的,则为黑色。函数 difference()通常 用来找出图像之间的差异。具体语法如下所示:
ImageChops.difference(image1,image2 )
其对应像素的计算公式如下所示:
out = abs(image1 - image2)
运用5
from PIL import Image,ImageChops
#打开图片
img1=Image.open('p1.jpg')
img2=Image.open('p2.jpg')
#比较函数difference()
ImageChops.difference(img2,img2).show()
内置的 ImageEnhance 模块中包含了多个用于增强图像效果的函数,主要用来调整图像 的色彩、对比度、亮度和清晰度等,感觉上和调整电视机的显示参数一样。
在模块 ImageEnhance 中,所有的图片增强对象都实现一个通用的接口。
这个接口只包 含如下一个方法。 方法 enhance()会返回一个增强的 Image 对象,参数 factor 是一个大于 0 的浮点数,1 表 示返回原始图片。
当在 Python 程序中使用模块 ImageEnhance 增强图像效果时,需要首先创建对应的增强 调整器,然后调用调整器输出函数,根据指定的增强系数(小于 1 表示减弱,大于 1 表示增 强,等于 1 表示原图不变)进行调整,最后输出调整后的图像。 在模块 ImageEnhance 中,常用的内置函数所示:
(1)ImageEnhance.Color(image ):功能是调整图像色彩平衡,相当于彩色电视机的 第 14 页 色彩调整,实现了上边提到的接口的 enhance 方法。
(2)ImageEnhance.Contrast(image ):功能是调整图像对比度,相当于彩色电视机的 对比度调整。
(3)ImageEnhance.Brightness(image ):功能是调整图像亮度。
(4)ImageEnhance.Sharpness(image ):功能是调整图像清晰度,用于锐化/钝化图片。 锐化操作的 factor 是 0~2 之间的一个浮点数。当 factor=0 时,返回一个模糊的图片对 象;当 factor=2 时,返回一个锐化的图片对象;当 factor=1 时,返回原始图片对象。
from PIL import Image,ImageEnhance
#打开图像
img=Image.open('p1.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
#将原图复制到(0,0)
img_output.paste(img,(0,0))
#获取色彩调整器
img_color=ImageEnhance.Color(img)
imgb=img_color.enhance(1.5)
img_output.paste(imgb,(w,0))
#减弱色彩
imgc=img_color.enhance(0.5)
img_output.paste(imgc,(2*w,0))
img_output.show()
结果对比展示:
from PIL import Image,ImageEnhance
#打开图像
img=Image.open('p2.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
#将原图复制到(0,0)
img_output.paste(img,(0,0))
#获取亮度调整器
img_bright=ImageEnhance.Brightness(img)
imgb=img_bright.enhance(1.5)
img_output.paste(imgb,(w,0))
#减弱亮度
imgc=img_bright.enhance(0.5)
img_output.paste(imgc,(2*w,0))
img_output.show()
看都看完了,这不反手给个三连?拿去给女朋友修图试试,说不定......嘿嘿嘿
代码也可通过公众号获取: