码迷,mamicode.com
首页 > 其他好文 > 详细

PIL简单图片处理(上)

时间:2015-11-12 01:21:55      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:

  自己看了下python,本来想照教程上一点一点学的,学了一会发现好没劲(教程本身质量很好),学python就是为了好玩,为什么还这么按部就班勒?果断google下python的爬虫(开始目的是这个),按照一很简单的demo,自己也写了个很简单的小程序(urllib2+re),爬美女吧的美女图片。其实爬图片本身并不难(一会儿就爬了一千都张),难的是图片质量参差不齐,怎么加以区别。质量包括图片本身的分辨率和图片的‘美感’,于是突然就想到了图像识别,把那些不美(搞笑图片和长的不美)的去掉,而且说干就干,虽然也是小白

  google下python图片操作,了解到PIL(python Image Lib),去官网下。windows版官方只有32位版,如果是64位的python好像还不兼容。。。我用的mac,下的源码。装之前还要装依赖,教程可以参考这里。中间遇到了‘include <X11/Xlib.h>’,可以参考这里。而且win版好像的show函数好像有问题,得改源码。。。反正各种问题,毕竟这么老了,感觉官方也放弃了,不过够用就行了

  PIL装好之后, 就可以开工了。当然啦,图像识别也不可能是一步到位的事,毕竟不是那么简单嘛

  首先就是对图片处理有个简单的概念。一张图片是由若干像素组成,而一个像素则由很多分量(通道)组成,每种分量大小的共同作用于一个像素,而成千上万个像素则组成了宏观上的图片,分量数和每个分量的位数共同决定了图片的位数。比如一张分辨率为1920*1080的美女图片,每一行就有1920个像素,每一列有1080个像素,那么总共就有1920X1080个像素。而一个像素最常见的是由R(red),G(green),B(blue)分量(通道)组成。而每一个分量一般用8位bit来表示,所以每一个分量就有2^8 = 256(0~255)种可能。分量数为3,每个分量有8位,图片就为3X8=24位。而有一种32位的图就是在24位的上加上一个alpha(透明度)分量,比如png格式的图片就可以表示一张背景透明的图。现在我们可以计算下,一张这样24位,1920*1080分辨率的图片的大小了。1920X1080*24 ~ 6MB,可是我们一般遇到的图片都不会有这么大,那是压缩之后的结果,jpeg就是一种压缩率可以很高的图片格式,而且是有损压缩(据说损失的都不重要)。

  有了图片的基础知识之后,接下来就可以开始了。图片的处理也就是将某些指定的像素设为特定的值而已了

  下面举个小demo:

  预期效果:对称效果,让图片的左边与右边对称,可以恶搞别人

  示例代码:

  

import PIL from Image

def mirror(im):
    width,height = im.size
    half = int(width/2)
    for x in range(half):
        for y in range(height):
            origin = im.getpixel((width-x-1,y))
            im.putpixel((x,y),origin)
    return im

imageurl = ‘./images/xg.jpg‘
image = Image.open(imageurl)
image.show()
image = mirror(image)
image.show()

  效果:

  技术分享      技术分享  

  在来一张上下的

  技术分享

PIL简单图片处理(上)

标签:

原文地址:http://www.cnblogs.com/ThrEcho/p/4957790.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!