Я пытаюсь вызвать функцию рекурсивно, но получаю следующую ошибку:
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