PythonChallenge系列-P11 图像分割

PythonChallenge系列第十一题P11(http://www.pythonchallenge.com/pc/return/5808.html,如需登陆:用户名huge,密码file)

P11.jpg

页面标题为odd even,再看图片,朦朦胧胧,像是有叠影。所以本题应该就是对这个图片的奇、偶像素做不同处理,从图片中分割出另一个藏着答案的图片。好了,问题就是这么处理这个奇偶了。经尝试,奇偶是指像素(x,y),x+y区分偶数或奇数。

代码

#-*- coding: utf-8 -*-
import os

#判断图像是否存在,不存在则下载
if os.path.isfile('cave.png'):
    pass
    #print 'existed'
else: #download the image
    import urllib2,base64
    req = urllib2.Request('http://www.pythonchallenge.com/pc/return/cave.jpg')
    authenticStr = base64.encodestring('%s:%s' % ('huge','file')).replace('\n','')
    req.add_header('Authorization','Basic %s' % authenticStr)
    response = urllib2.urlopen(req)
    f = file('cave.png', 'wb')
    f.write(response.read())
    f.close()

#图像处理
from PIL import Image #需要先下载安装PIL

try:
    #--打开图像
    image = Image.open('cave.png')
    print image.format,image.size,image.mode #PNG (629, 95) RGBA
    width, height = image.size
    imgOdd = Image.new('RGB',(width,height),0)
    imgEven = Image.new('RGB',(width,height),0)

    #--加载像素
    pixel = image.load()

    for y in range(0,height):
        for x in range(0,width):
            #print x,y,pixel[x,y]
            if (x+y)%2==0:
                imgEven.putpixel((x,y),pixel[x,y])
            else:
                imgOdd.putpixel((x,y),pixel[x,y])

    imgEven.show()
    imgOdd.show()
    image.show()
except IOError,e:
    print 'Error',e

这段代码从网上下载要处理的图片(其中存在认证过程),然后利用Image模块进行处理,将坐标(x,y) x+y为偶数的像素,复制到imgEven中。

认证和图像处理部分的代码和P7、P9类似。

P7 PythonChallenge系列-P7图像处理

P9 PythonChallenge系列-P9 图像绘制

 P111.jpg

解谜

图像右上角是一个单词evil。将url中的5808替换evil。OK,成功解谜并打开下一题。

http://www.pythonchallenge.com/pc/return/evil.html

作者:JarvisChu
原文链接:PythonChallenge系列-P11 图像分割
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

发表评论