«Исключение в обратном вызове Tkinter» при рекурсивном вызове функции - Python - PullRequest
0 голосов
/ 31 марта 2011

Я пытаюсь вызвать функцию рекурсивно, но получаю следующую ошибку:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\Lab5\Lab5.py", line 47, in segmentImage
    self.growSeedPix4Connect(seedi, seedj, value) # grow seed pixel using 4 connected
  File "C:\Lab5\Lab5.py", line 73, in growSeedPix4Connect
    self.growSeedPix4Connect(n,m,value)

С последними двумя строками "Файл" C: \ Lab5 \ Lab5.py ", строка 73, в growSeedPix4Connect self.growSeedPix4Connect (n, m, value) "повторяется бесконечно.

Код выглядит следующим образом ..... Я новичок в Python (и программировании в целом), поэтому код может показаться любительским, но я немного застрял. Кто-нибудь может указать, почему я получаю эту ошибку?

class TkFileDialog(Tkinter.Frame):

    def __init__(self, root):
        Tkinter.Frame.__init__(self, root)
        self.imageToDisplay = type(cv.cvmat) # Define Instance Variables
        self.im = type(cv.cvmat)
        self.Array = numpy.zeros((300,300), dtype=numpy.int)
        ..... and a bunch of other stuff to create the GUI which is all working well 
#--------------------------------------------------------------------------------------
    def segmentImage(self): # find and segment objects
        self.imageToDisplay = cv.CreateImage((self.im.width, self.im.height), self.im.depth, self.im.nChannels)
        value = 0; seedi = -1; seedj = -1;
        for h in range(self.im.height):
            for w in range(self.im.width):
                pixVal = cv.Get2D(self.im, h, w)
                if pixVal[0] == 0: # found seed pixel
                    seedi = h
                    seedj = w
                    value = value + 1
                    self.growSeedPix4Connect(seedi, seedj, value) 
                seedi = -1;
                seedj = -1;
        self.segments.set(str(value))
        cv.Copy(self.im, self.imageToDisplay)
        cv.NamedWindow(win_name2, cv.CV_WINDOW_AUTOSIZE) 
        cv.ShowImage(win_name2, self.imageToDisplay)
#--------------------------------------------------------------------------------------   
    def growSeedPix4Connect(self, iseed, jseed, value):
        pixVal = cv.Get2D(self.im, iseed, jseed)
        if pixVal[0] == 0:
            cv.Set2D(self.im, iseed, jseed, value)
            self.Array[iseed][jseed] = value
            for i in range(-1,2):
                for j in range(-1,2):
                    n = iseed+i
                    m = jseed+j
                    if n > 0:
                        if n < 99:
                            if m > 0:
                                if m < 99:
                                    if i*j == 0:
                                        pixVal = cv.Get2D(self.im, n, m)
                                        if pixVal[0] == 0: # then found connected pixel
                                            self.growSeedPix4Connect(n,m,value) 

Последняя строка - код ошибки.

В двух словах, программа открывает двоичное изображение и сканирует первый черный пиксель (начальный пиксель). Когда он найден, он увеличивает исходный пиксель и меняет значение с 0 на 1. Идея состоит в том, что в конце этого всего черного шарика отождествляется со значением 1, которое я затем должен продолжить делать с ним другими вещами.

Привет

Conrad

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...