二、ImageFilter
ImageFilter中提供了很多常用的滤镜功能,
2.1、高斯模糊
高斯模糊也叫高斯平滑,是啥我也不知道,反正听名字就是模糊。我们结合上面的内容完成一个小案例:
from PIL import Image, ImageFilter
# 打开图像
im1 = Image.open('iron_man.jpg')
# 创建一个im1两倍宽的图像
img = Image.new('RGB', (im1.width*2, im1.height), 'red')
# 高斯模糊处理
im2 = im1.filter(ImageFilter.GaussianBlur)
# 将im1粘贴到img上
img.paste(im1, (0, 0))
# 将im2(高斯模糊后的图像)粘贴到img上
img.paste(im2, (im1.width, 0))
img.show()
其他滤镜:
滤镜值 | 滤镜名词 |
---|---|
BLUR | 模糊效果 |
CONTOUR | 轮廓 |
DETAIL | 细节 |
EDGE_ENHANCE | 边缘增强 |
EDGE_ENHANCE_MORE | 边缘增强plus |
EMBOSS | 浮雕效果 |
FIND_EDGES | 寻找边缘 |
SMOOTH | 平滑 |
三、ImageChops模块(图像合成)
ImageChops模块中,提供了很多图像合成的方法。这些方法是通过计算通道中像素值来实现的,不同的方法有不同的计算方式。
3.1、加法运算
加法运算通过ImageChops.add(image1, image2, scale=1.0, offset=0)方法实现,合成公式如下:
out = (im1 + im2)/scale + offset其中scale和offset是有默认值的。所以使用时我们可以省略参数,具体实现如下:
from PIL import Image, ImageChops
# 打开图像
im1 = Image.open('im1.jpg')
im2 = Image.open('im2.jpg')
# 合成图像并显示
im3 = ImageChops.add(im1, im2)
im3.show()
3.2、减法运算
加法运算通过ImageChops.subtract(image1, image2, scale=1.0, offset=0)方法实现,合成公式如下:
out = (im1 - im2)/scale + offset 1 其使用和add方法是一致的,代码如下:
from PIL import Image, ImageChops
# 打开图像
im1 = Image.open('xscn.jpg')
im2 = Image.open('xscn2.jpg')
# 合成图像并显示
im3 = ImageChops.subtract(im1, im2)
im3.show()
3.3、其它函数
因为大多数函数的使用都比较简单,所以后续的函数也不单独拿出来讲了,具体功效可以看下列表:
函数名 | 参数 | 作用 | 计算公式 |
---|---|---|---|
darker(变暗) | (image1, image2) | 对比两种图片的像素,取两种图片中对应像素的较小值。(去亮留暗) | min(im1, im2) |
lighter(变亮) | 同上 | 对比两种图片的像素,取两种图片中对应像素的较大值。(去暗留亮) | max(im1, im2) |
invert(反色) | (image) | 将max(255)减去每个像素的值 | max-image |
multiply(叠加) | (image1, image2) | 两种图片互相叠加。如果和黑色叠加,将获得一张很色图片 | im1*im2/max |
screen(屏幕) | 同上 | 先反色后叠加 | max-((max-im1)*(max-im2)/max) |
difference(比较) | 同上 | 各个像素做减法,取绝对值。如果像素相同结果为黑色 | abs(im1-im2) |
from PIL import Image, ImageChops
# 打开图像
im1 = Image.open("im1.jpg")
im2 = Image.open("im2.jpg")
# 对图像进行各种操作
im3 = ImageChops.darker(im1, im2)
im3.save('darker.jpg')
im3 = ImageChops.lighter(im1, im2)
im3.save('lighter.jpg')
im3 = ImageChops.invert(im1)
im3.save('invert.jpg')
im3 = ImageChops.multiply(im1, im2)
im3.save('multiply.jpg')
im3 = ImageChops.screen(im1, im2)
im3.save('screen.jpg')
im3 = ImageChops.difference(im1, im2)
im3.save('difference.jpg')
Comments NOTHING