Flood Fill Algorithmus-Python

So, ich bin versuchen, um eine flood fill-Algorithmus, und ich erhalte eine Rekursion Fehler mit diesem. Der Algorithmus scheint zu einer unendlichen Rekursion, und ich kann nicht feststellen, warum. Ich habe überall gesucht im internet und ich finde keine Lösung wie es scheint, wie mein Programm richtig ist nach Ansicht der meisten Quellen. Es scheint etwas falsch zu sein jedoch. Dies ist die bearbeitete version des Codes. Die Fehlermeldung ist immer noch maximal rekursionen.

Bekomme ich Hilfe?

    from Tkinter import *
    from PIL import Image, ImageTk
    from random import *


    w= 75
    h= w

    flood = Image.new("RGB", (w,h), (0,0,0))

    x = 0
    y = 0
    count = 0

    colorlist = []
    i = 0

    while x < w -1:
        y = 0
        while y < h-1:
            r = random()
            if r < .25:
                flood.putpixel((x,y), (0,0,0))
            else:
                flood.putpixel((x,y), (255,255,255))
            y += 1
        x += 1
    x = 0
    y = 0
    while x < w-1:
        y = 0
        while y < h-1:
            r = random()
            if x == 0 or y == 0 or x == w-1 or y ==h-1:
                flood.putpixel((x,y), (0,0,0))
            y += 1
        x += 1


    def floodfill(x,y, d,e,f, g,h,i, image, count):
            count+=1
            (a,b,c) = image.getpixel((x,y))
            if (a,b,c) == (255,255,255):
                (j,k,l) = image.getpixel((x-1,y))
                (m,n,o) = image.getpixel((x+1, y))
                (p,q,r) = image.getpixel((x,y-1))
                (s,t,u) = image.getpixel((x,y+1))
            if count > 990:
                return
            if (a,b,c) == (255,255,255):
                image.putpixel((x,y), (g,h,i))
                floodfill(x-1, y, d,e,f, g,h,i, image, count)
                floodfill(x+1, y, d,e,f, g,h,i, image, count)
                floodfill(x, y-1, d,e,f, g,h,i, image, count)
                floodfill(x, y+1, d,e,f, g,h,i, image,count)



    floodfill(2,2, 0,0,0,255,0,0,flood, 0)

    flood.save("flood.png")
    print "done"
  • Bitte geben Sie die genaue Fehlermeldung, die Sie sehen.
  • Absturz mit Laufzeitfehler: maximale Rekursionstiefe überschritten, solange der Aufruf einer Python-Objekt
  • Sie scheinen nicht zu werden, die überprüfung für x,y wird out-of-bounds - dazu führen könnte, dass eine unendliche Rekursion als x schnell geht Links. Oder erhoffen Sie sich für Ihre Grenzen zu sorgen?
  • Python hat eine relativ niedrige Grenze für Rekursion, um die 1000 - dies ist ein Python-Falle für jemanden verwendet, um funktionale Sprachen mit tail-Rekursion Optimierungen wie Schema.
  • Okay, so fügte ich ein paar mehr Grenzen und es nun nicht gehen out of bounds. Es funktioniert für kleinere Bilder, aber wenn Sie erhöhen Sie die Größe des Bildes, es erhöht die Anzahl der rekursionen, die wiederum bewirkt, dass die maximale Reichweite.
  • Der bearbeitete code wird nun bis.

InformationsquelleAutor user1541756 | 2012-07-31
Schreibe einen Kommentar