python—PIL图像操作(二)滤镜、图片合成、图像效果

目录

ImageFilter滤镜

ImageChops图片合成

ImageEnhance图像效果


ImageFilter滤镜

ImageFilter模块实现了滤镜功能,使用函数filter()可以对指定的图片使用滤镜效果,函数filter()的语法:Image.filter()      #参数为滤镜方式

ImageFilter提供了预定义的滤镜和自定义滤镜函数。常用的预定义滤镜:

  • BLUE:模糊
  • CONTOUR:轮廓
  • DETAIL:详情
  • EDGE_ ENHANCE:边缘增强
  • EDGE_ ENHANCE _MORE:边缘更多增强
  • EMBOSS:浮雕
  • FIND_ EDGES:寻找边缘
  • SHARPEN:锐化
  • SMOOTH:平滑

from PIL import Image, ImageFilter

img1 = Image.open('poo/1.jpg')
gaosi = img1.filter(ImageFilter.GaussianBlur)  # 高斯模糊
lunkuo = img1.filter(ImageFilter.CONTOUR)  # 轮廓
w, h = img1.size
new_img = Image.new('RGB', (w * 3, h), 'yellow')
new_img.paste(img1, (0, 0))  # 原图
new_img.paste(gaosi, (w, 0))
new_img.paste(lunkuo, (w * 2, 0))
new_img.show()

ImageChops图片合成

ImageChops模块中包含了多个用于实现图片合成的函数。这些合成功能是通过计算通道中像素值的方式来实现的。其主要用于制作特效、合成图片等操作。

常用的内置函数:

①相加函数add()对两张图片进行算术加法运算:ImageChops.add(image1, image2, scale= 1.0, offset=0),合成后的图像中每个像素值,是两幅图像对应像素值依据公式out = ((image1 + image2) / scale + offset)进行计算得到的。

②减法函数subtract()对两张图片进行算术减法运算:ImageChops.subtract(image1, image2, scale=1.0, offset=0),在合成后图像中的每个像素值,是两幅图像对应像素值依据公式out = ((image1 - image2) / scale + offset)进行得到的。

③变暗函数darker()比较两个图片的像素,取两张图片中对应像素的较小值,所以合成时两幅图像中对应位置的暗部分得到保留,而去除亮部分:ImageChops.darker(image1, image2)

像素的计算公式out = min(image1, image2)

④变亮函数lighter()与变暗函数dapker()相反,功能是比较两个图片(逐像素比较),返回新的图片,这幅新的图片是将两张图片中较亮的部分叠加得到的。即在某一点上,取两张图中值大(亮)的点:ImageChops.lighter(image1, image2),像素的计算公式out = max(imagel, image2)

⑤叠加函数multiply()将两张图片互相叠加。如果用纯黑色与某图片进行叠加操作,就会得到一幅纯黑色的图片。如果用纯白色与图片作叠加,则图片不受影响:ImageChops.multiply (image1, image2)合成的图像的效果类似两张图片在透明的描图纸上叠放在一起观看的效果。像素计算公式out = image1 * image2 / MAX

⑥屏幕函数screen()先反色后叠加,实现合成图像的效果,如将两张幻灯片用两台投影机同时投影到一个屏幕上的效果:ImageChops.screen(image1, image2),像素计算公out=MAX-(MAX-image1)* (MAX-image2)/MAX)

⑦反色函数invert()类似于集合操作中的求补集,最大值为Max,每个像素做减法,取出反色。在反色时将用255减去一幅图像的每个像素值,从而得到原来图像的反相,其表现为“底片”性质的图像:ImageChops.invert (image),像素计算公式out = MAX - image

⑧比较函数difference()逐像素做减法操作,计算出绝对值。两幅图像对应像素值相减后的图像,对应像素值相同的则为黑色。通常用来找出图像之间的差异:ImageChops.diference (image1, image2),像素计算公式out = abs(image1 - image2)

from PIL import Image,ImageChops

img1 = Image.open('poo/1.jpg')
img2 = Image.open('poo/5.jpg')
ImageChops.add(img1,img2).show()
ImageChops.subtract(img1,img2).show()
ImageChops.darker(img1,img2).show()
ImageChops.lighter(img1,img2).show()
ImageChops.multiply(img1,img2).show()
ImageChops.screen(img1,img2).show()
ImageChops.invert(img2).show()
ImageChops.difference(img1,img2).show()

ImageEnhance图像效果

ImageEnbance模块中包含了多个用于增强图像效果的函数,主要用来调整图像的色彩、对比度、亮度和清晰度等。在模块ImageEnhance中,所有的图片增强对象实现都通过一个通用的接口方法enhance()调用,enhance(factor)返回一个增强的Image对象,参数factor是一个大于0的浮点数,1表示返回原始图片。

当在Python程序中使用模块ImageEnhance增强图像效果时,需要首先创建对应的增强调整器,然后调用调整器输出函数,根据指定的增强系数(小于1表示减弱,大于1表示增强,等于1表示原图不变)进行调整,最后输出调整后的图像。

在模块ImageEnhance中,常用的内置函数:

(1)ImageEnhance.Color(image) :调整图像色彩平衡

(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

# 调节色彩
img2 = Image.open('poo/5.jpg')
img_color = ImageEnhance.Color(img2)
w1, h1 = img2.size
img_out = Image.new('RGB', (w1 * 3, h1), 'green')
imga = img_color.enhance(1.9)
imgb = img_color.enhance(0.5)
img_out.paste(imga, (0, 0))
img_out.paste(img2, (w1, 0))  # 原图
img_out.paste(imgb, (w1 * 2, 0))
img_out.show()

# 调节亮度
img_brightness = ImageEnhance.Brightness(img_out)
imgc = img_brightness.enhance(0.5).show()
# img_out.point(lambda i: i * 0.5).show()  # 通过Image的point()方法也可以实现像素点亮度的调节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值