在Python中使用PIL模块对图片进行高斯模糊处理的教程

1238次阅读  |  发布于5年以前

从一篇文章中看到,PIL 1.1.5 已经内置了高斯模糊,但是并没有在文档中提及,而且PIL的高斯模糊中 radius 是硬编码, 虽然构造方法中有传入 radius 参数,但压根就没有用到 (看这里),所以需要自己进行改造,当然,知道了原因, 修改起来自然非常简单了。

结合帖子中的需求,对局部进行高斯模糊,所以还需要结合使用 crop paste 方法实现局部使用滤镜。

代码如下:


    #-*- coding: utf-8 -*-

    from PIL import Image, ImageFilter

    class MyGaussianBlur(ImageFilter.Filter):
      name = "GaussianBlur"

      def __init__(self, radius=2, bounds=None):
        self.radius = radius
        self.bounds = bounds

      def filter(self, image):
        if self.bounds:
          clips = image.crop(self.bounds).gaussian_blur(self.radius)
          image.paste(clips, self.bounds)
          return image
        else:
          return image.gaussian_blur(self.radius)

    bounds = (150, 130, 280, 230)
    image = Image.open('source.jpg')
    image = image.filter(MyGaussianBlur(radius=29, bounds=bounds))
    image.show()

可以看下效果:

201555170400852.jpg \(500×667\)

201555170538214.jpg \(500×667\)

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8