无法获得分形图像

时间:2016-03-25 19:24:11

标签: python image

所以我正在做一个关于在python中使用图像对象的家庭作业。我正在使用python 3.4.1进行此分配。我觉得我已经完成了所有工作,但它不想正常工作。基本上,我试图让它看起来像我附加的图片,但它只显示为1条红线,并且在白色背景上显示为1条红线从上到下。 任何帮助将不胜感激。

附图: http://imgur.com/TMho41w

import cImage as image

width = 500
height = 500

img = image.EmptyImage(width, height)
win = image.ImageWin("Exercise 3", width, height)
img.draw(win)

for row in range(height):
    for col in range(width):
        p = img.getPixel(col, row)

        if row == 0 or col == 0:
            p = image.Pixel(255, 0, 0)
        else:
            Sum = 0
            temppixel = img.getPixel(col-1, row)
            if temppixel.getRed() == 255:
                Sum = Sum + 1
            elif temppixel.getBlue() == 255:
                Sum = Sum + 2      

            temppixel = img.getPixel(col-1, row-1)
            if temppixel.getRed() == 255:
                Sum = Sum + 1
            elif temppixel.getBlue() == 255:
                Sum = Sum + 2  

            temppixel = img.getPixel(col, row-1)
            if temppixel.getRed() == 255:
                Sum = Sum + 1
            elif temppixel.getBlue() == 255:
                Sum = Sum + 2                

            if Sum % 3 == 1:
                p = image.Pixel(255, 0, 0)
            elif Sum % 3 == 2:
                p = image.Pixel(0, 0, 255)
            else:
                p = image.Pixel(255, 255, 255)

        img.setPixel(col, row, p)

    img.draw(win)        

img.draw(win)

# uncomment this to save the image as a file
#img.saveTk("gradient.gif")

win.exitonclick()

1 个答案:

答案 0 :(得分:0)

不幸的是,您的代码完全按照您的编写方式执行。让我们先命名三个if ... elif条件1,2和3:

  1. 第一个像素设置为红色
  2. 然后我们进入第一行,所以row = 0表示条件2和3使用无效坐标(因为row-1)。所以这里只有条件,它总是会增加1 sum,这意味着它会添加一个新的红色像素。
  3. 所以你现在有了第一条红线。
  4. 对于第一列,从第二行开始:条件1& 2使用无效坐标。条件3将始终返回sum = 1,这意味着新的红色像素。你有自上而下的红线
  5. 然后从row = 1col = 1开始,所有邻居都是红色的,这会导致新的白色像素。不幸的是,白色确实包含一些红色,所以它总是符合相同的条件,并且你有白色背景。
  6. 我还没有找到这种方法的完整算法来构建Sierpinski地毯,所以我无法真正纠正它。但是你应该特别注意这些边缘情况:如果你在第一行或第一行,应该是三个邻居?