python卡通滤镜_纯Python综合图像处理小工具(3)10种滤镜算法

滤镜处理是图像处理中一种非常常见的方法。比如photoshop中的滤镜效果,除了自带的滤镜,还扩展了很多第三方的滤镜效果插件,可以对图像做丰富多样的变换;很多手机app实现了实时滤镜功能,最有名的当属Instagram。

滤镜的原理,常见的是针对数字图像的像素矩阵,使用一个nxn的方形矩阵做滤波器(即kernel,常见的如3x3,5x5等),对该像素矩阵进行遍历,遍历后的图像就是输出图像,如果算法经过优化,遍历的速度足够快,那就是实时滤镜(live filter),可以实时预览图像过滤后的效果。

ImageFilter是Python PIL的滤镜模块,当前版本支持10种加强滤镜,通过这些预定义的滤镜,可以方便的对图片进行一些过滤操作,从而去掉图片中的噪音(部分的消除),这样可以降低图像处理算法的复杂度(如模式识别等),更方便的实现和预览一些算法的效果。

本文脚本包含以下全部滤镜, 实现了10种图像处理滤镜的效果预览和JPEG文件保存。

ImageFilter.BLUR

模糊滤镜

ImageFilter.CONTOUR

轮廓

ImageFilter.DETAIL

细节滤镜

ImageFilter.EDGE_ENHANCE

边界加强

ImageFilter.EDGE_ENHANCE_MORE

边界加强(阀值更 大)

ImageFilter.EMBOSS

浮雕滤镜

ImageFilter.FIND_EDGES

边界滤镜

ImageFilter.SMOOTH

平滑滤镜

ImageFilter.SMOOTH_MORE

平滑滤镜(阀值更大)

ImageFilter.SHARPEN

锐化滤镜

原图:

模糊滤镜:

锐度增强滤镜:

细节滤镜:

轮廓滤镜:

边界提取滤镜:

边界增强滤镜:

边界增强滤镜-加强版:

平滑滤镜:

平滑滤镜-加强版:

浮雕滤镜:

PIL库的滤镜算法可以在Python\Lib\site-packages\PIL路径下找到,如下所示:

在PIL路径下,我们看到了三个同名但后缀不同的文件:ImageFilter.py ImageFilter.pyc ImageFilter.pyo 。

.pyc文件:是同名的.py编译后的字节码文件,用来供解释器解释执行;

.pyo文件:是同名的.pyc文件经过优化后的字节码文件,通常体积更小,运行更快。

滤镜算法在ImageFilter.py文件中。

如前文所述,每一个滤镜通常对应着一个滤波器(即kernel),PIL中的kernel均为常见的3x3和5x5方形矩阵,下面是PIL中9种滤镜对应的矩阵:

模糊滤镜:

class BLUR(BuiltinFilter):

name = "Blur"

filterargs = (5, 5), 16, 0, (

1,  1,  1,  1,  1,

1,  0,  0,  0,  1,

1,  0,  0,  0,  1,

1,  0,  0,  0,  1,

1,  1,  1,  1,  1

)

轮廓滤镜:

class CONTOUR(BuiltinFilter):

name = "Contour"

filterargs = (3, 3), 1, 255, (

-1, -1, -1,

-1,  8, -1,

-1, -1, -1

)

细节滤镜:

class DETAIL(BuiltinFilter):

name = "Detail"

filterargs = (3, 3), 6, 0, (

0, -1,  0,

-1, 10, -1,

0, -1,  0

)

边缘增强滤镜:

class EDGE_ENHANCE(BuiltinFilter):

name = "Edge-enhance"

filterargs = (3, 3), 2, 0, (

-1, -1, -1,

-1, 10, -1,

-1, -1, -1

)

边缘增强滤镜-增强版:

该增强版和原滤镜仅仅是矩阵2行2列的一个参数大小不同,实际是修改了中心像素的权重。这个数值可以任意修改以自定义边缘增强的幅度。

class EDGE_ENHANCE_MORE(BuiltinFilter):

name = "Edge-enhance More"

filterargs = (3, 3), 1, 0, (

-1, -1, -1,

-1,  9, -1,

-1, -1, -1

)

浮雕滤镜

class EMBOSS(BuiltinFilter):

name = "Emboss"

filterargs = (3, 3), 1, 128, (

-1,  0,  0,

0,  1,  0,

0,  0,  0

)

边缘提取滤镜

class FIND_EDGES(BuiltinFilter):

name = "Find Edges"

filterargs = (3, 3), 1, 0, (

-1, -1, -1,

-1,  8, -1,

-1, -1, -1

)

平滑滤镜:

class SMOOTH(BuiltinFilter):

name = "Smooth"

filterargs = (3, 3), 13, 0, (

1,  1,  1,

1,  5,  1,

1,  1,  1

)

平滑滤镜-加强版:

平滑滤镜的加强是增加了滤镜窗口的尺寸,有3x3扩展到5x5, 这样每一个新像素的产生会包含25个周围原始像素的加权贡献(离得越近,贡献越大),这样的结果会更加平滑自然,代价是处理速度会明显的变慢。

class SMOOTH_MORE(BuiltinFilter):

name = "Smooth More"

filterargs = (5, 5), 100, 0, (

1,  1,  1,  1,  1,

1,  5,  5,  5,  1,

1,  5, 44,  5,  1,

1,  5,  5,  5,  1,

1,  1,  1,  1,  1

)

锐化滤镜:

class SHARPEN(BuiltinFilter):

name = "Sharpen"

filterargs = (3, 3), 16, 0, (

-2, -2, -2,

-2, 32, -2,

-2, -2, -2

)

#start#-*- coding: cp936 -*-import Image,ImageDraw

import ImageFilter,random,sys

img = Image.open("1.jpg")

##图像处理##

#转换为RGB图像img = img.convert("RGB")

#经过PIL自带filter处理imgfilted_b = img.filter(ImageFilter.BLUR)

imgfilted_c = img.filter(ImageFilter.CONTOUR)

imgfilted_ee = img.filter(ImageFilter.EDGE_ENHANCE)

imgfilted_ee_m = img.filter(ImageFilter.EDGE_ENHANCE_MORE)

imgfilted_em = img.filter(ImageFilter.EMBOSS)

imgfilted_fe = img.filter(ImageFilter.FIND_EDGES)

imgfilted_sm = img.filter(ImageFilter.SMOOTH)

imgfilted_sm_m = img.filter(ImageFilter.SMOOTH_MORE)

imgfilted_sh = img.filter(ImageFilter.SHARPEN)

imgfilted_d = img.filter(ImageFilter.Detail)

##图像保存##

imgfilted_b.save("1b.jpg")

imgfilted_c.save("1c.jpg")

imgfilted_ee.save("1ee.jpg")

imgfilted_ee_m.save("1eem.jpg")

imgfilted_em.save("1em.jpg")

imgfilted_fe.save("1fe.jpg")

imgfilted_sm.save("1sm.jpg")

imgfilted_sm_m.save("1smm.jpg")

imgfilted_sh.save("1sh.jpg")

imgfilted_d.save("1d.jpg")

##图像显示##

imgfilted_b.show()

imgfilted_c.show()

imgfilted_ee.show()

imgfilted_ee_m.show()

imgfilted_em.show()

imgfilted_fe.show()

imgfilted_sm.show()

imgfilted_sm_m.show()

imgfilted_sh.show()

imgfilted_d.show()

#end

原文:http://www.cnblogs.com/sopic/p/4538052.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值