设为首页 收藏本站
查看: 843|回复: 0

[经验分享] Python图形图像处理库的介绍之Image模块

[复制链接]

尚未签到

发表于 2017-5-7 08:06:38 | 显示全部楼层 |阅读模式
 Image模块的介绍  创建一个新的图片
  Python代码
双击代码全选
1
2
Image.new(mode, size)
Image.new(mode, size, color)



层叠图片  层叠两个图片,img2和img2,alpha是一个介于[0,1]的浮点数,如果为0,效果为img1,如果为1.0,效果为img2。当然img1和img2的尺寸和模式必须相同。这个函数可以做出很漂亮的效果来,而图形的算术加减后边会说到。
  Python代码
双击代码全选1
Image.blend(img1, img2, alpha)



  composite可以使用另外一个图片作为蒙板(mask),所有的这三张图片必须具备相同的尺寸,mask图片的模式可以为“1”,“L”,“RGBA”(关于模式请参看前一篇)
  Python代码
双击代码全选1
Image.composite(img1, img2, mask)



  转换图形模式
  下面看一个比较牛的方法convert,这个方法可以将图片在不同的模式间进行转换,在将灰度图转换成二值图时,所有的非零值被设置为255(白色)。灰度图的转换方式采用的是这个算法:
  写道
  L = R*299/1000 + G*587/1000 + B*114/1000
  (此为ITU-R 610-2 亮度转换方程)




  点操作
  img.point(function),这个function接受一个参数,且对图片中的每一个点执行这个函数,这个函数是一个匿名函数,在python之类的函数式编程语言中,可以使用
  lambda表达式来完成,如
  Python代码
双击代码全选1
out = img.point(lambda i : i*1.2)#对每个点进行20%的加强



双击代码全选1



如果图片是“I”或者“F”模式,那么这个lambda必须使用这样的形式  Python代码
双击代码全选1
2
3
argument * scale + offset
e.g
out = img.point(lambda i: i*1.2 + 10)



   透明通道的使用
  putalpha(alpha)
  这个方法是一个神奇的方法,你可以将一个图片(与原图尺寸相同)写入到原图片的透明通道中,而不影响原图片的正常显示,可以用于信息隐藏哦。当然,前提是原
  始图片有透明通道。不过就算不是也没有多大关系,因为有PIL提供的convert功能,可以把一个图片先转换成RGBA模式,然后把要隐藏的信息文件转成“L”或者“1”模
  式,最后使用这个putalpha将其叠加。而在图片的使用方,只需要简单的抽取其中的透明通道就可以看到隐藏信息了,哈哈。
  Python代码
双击代码全选1
2
3
4
5
6
7
def hideInfoInImage(img, info):
  if img.mode != "RGBA":
    img = img.convert("RGBA")
  if info.mode != "L" and info.mode != "1":
    info = info.convert("L")
  img.putalpha(info)
  return img



测试之  Python代码
双击代码全选1
2
3
4
5
6
if __name__ == "__main__":
  img = Image.open("green.png")
  band = Image.open("antelope_inhalf.jpg")
  img = hideInfoInImage(img, band)
  img.show()#可以看到,原图片没有显式变化
  img.split()[3].show()#抽取出透明通道中的图片并显示




  在windows系统中,默认的图片浏览器会把透明通道附加,可能会影响效果,可以用别的图片浏览器查看。
  Python代码
双击代码全选1
2
def randomPalette(length, min, max):
  return [ randint(min, max) for x in xrange(length)]



调色板的使用
1
 
2
3
4
5
6
putpalette(palette)
  img = Image.open("green.png").convert("L")
  #img.show()
  l = randomPalette(768, 0, 255)
  img.putpalette(l)
  img.show()


  现将green.png转成灰度图,然后自定义一个随机调色板着色,可以看到这个效果。可能有人在想这个图形处理的作用,其实作用还是比较大的,做模式识别,人脸检
  测等等操作事,真彩的图片往往很难处理,一个解决方案就是处理成灰度图或者二值图,一来可以去掉部分干扰,二来可以减少需要处理的数据量(提高效率)。
  图片转换(扭曲,映射)
  transform()方法的使用
  Python代码
双击代码全选1
transform(size, method, data)



双击代码全选1



  method参数:
EXTENT剪一个矩形出来(用以剪切,拉伸,压缩等操作)
AFFINE几何防射转换
QUAD将一个四边形映射到一个矩形
MESH将多个四边形映射到一个操作
在EXTENT参数的情况下,data是一个四元组(x0,y0,x1,y1),表示输入图片中需要处理的区域,size为新图片的尺寸,是一个二元组(width, height)  用途:剪贴,拉伸,压缩等操作

  在AFFINE参数的情况下,data是一个六元组(a,b,c, d,e,f),其中包含affine转置矩阵的前两行。对于输出图片的每个像素(x,y),会被新值(ax+by+c, dx+ey+f)替换。
  用途:反转,旋转,剪切等

  在QUAD参数的情况下,data是一个八元组(x0,y0,x1,y1,x2,y2,x3,y3)表示源四边形的四个定点的坐标值.MESH方式跟QUAD的效果相当,不过是对多个四边形进行映射操作.

  transpose
  Python代码
双击代码全选1
im.transpose(method)



  method参数:
FLIP_LEFT_RIGHT左右倒置
FLIP_TOP_BOTTOM上下倒置
ROTATE_90旋转90度(逆时针)
ROTATE_180旋转180度(逆时针)
ROTATE_270旋转270度(逆时针)
(360度?这个就不用转了吧,呵呵)  关于Image模块就介绍到这里,还有一部分属性,函数和方法没有在此做分析,这部分比较简单,如果想了解更多,可以参看pil的handbook。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373995-1-1.html 上篇帖子: 零基础学python-15.4 函数的多态vs对象的多态 下篇帖子: Learn Python The Hard Way学习(40)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表