Python Challenge(11)

続いてレベル11
わからないのでフォーラムを見ると、

Look very very closely at the image.

http://www.pythonchallenge.com/forums/viewtopic.php?t=38

よく見ると、顔のような絵が浮かび上がる様に見える。
タイトルの「odd even」からピクセルの座標が(奇数、偶数)のピクセルを集めれば答えが出来上がると予想。
画像の縁もギザギザになっているように見えるので、黒のピクセルが紛れていると見た。
PILのドキュメントを探してみるとImage.getpixelImage.putpixelが使えそう。

import Image

img = Image.open('cave.jpg')
ans = Image.new(img.mode, (img.size[0]/2, img.size[1]/2), 'white')

for y in range(img.size[1]):
    for x in range(img.size[0]):
        if x % 2 == 1 and y % 2 == 0:
            p = img.getpixel((x, y))
            ans.putpixel((x/2, y/2), p)

ans.save('ch11.jpg')

出来たのは、

元の画像が縮小しただけに見える。
if文の条件を変えたら偶然いけた。

import Image

img = Image.open('cave.jpg')
ans = Image.new(img.mode, (img.size[0]/2, img.size[1]/2), 'white')

for y in range(img.size[1]):
    for x in range(img.size[0]):
        if x % 2 == 1 and y % 2 == 1:
            p = img.getpixel((x, y))
            ans.putpixel((x/2, y/2), p)

ans.save('ch11.jpg')

全然、顔じゃねーし。
(x,y)が(偶,偶),(奇,奇)だと答え、(偶,奇),(奇偶)だと答えを隠すための絵になる。