【问题标题】:error while printing connected components in a gray scale image在灰度图像中打印连接组件时出错
【发布时间】:2014-03-25 06:39:34
【问题描述】:
import sys
from PIL import Image
import ImageFilter
import numpy
import PIL.Image
from numpy import array
stack=[]
z=0    
def main():
    connected(drblur)//image in list of lists [[],[],[],[],....[]]
def connected(rdrblur):
    table={}
    #print len(rdrblur),len(rdrblur[0])
    for item in rdrblur:
        item.insert(0,0)
        item.append(0)
    #print len(rdrblur),len(rdrblur[0])
    rdrblur.insert(0,[0]*len(rdrblur[0]))
    rdrblur.append([0]*len(rdrblur[0]))
    copy=[]
    for item in rdrblur:
        copy.append(item[:])
    global z
    count=0 
    for i in range(1,len(rdrblur)-1):
        for j in range(1,len(rdrblur[0])-1):
            if (i,j) not in stack:
                if rdrblur[i][j]==copy[i][j]:
                    z=0
                    times=dfs(i,j,str(count),rdrblur,copy)
                    table[count]=(rdrblur[i][j],times+1)
                    count=count+1
    stack1=[]
    #print table
    for item in table.values():
        stack1.append(item)

    #print stack1
    table2={}
    for item in stack1:
        if item[0] not in table2.keys():
            table2[item[0]]={'coherent':0,'incoherent':0}
    for item in stack1:
        if item[1]>900:
            table2[item[0]]['coherent']=table2[item[0]]['coherent']+item[1]

        else:
            table2[item[0]]['incoherent']=table2[item[0]]['incoherent']+item[1]
    print tablel2
def dfs(x,y,co,b,c):
    dx = [-1,-1,-1,0,0,1,1,1]
    dy = [-1,0,1,-1,1,-1,0,1]
    global z
    #print x,y,co
    c[x][y]=co
    stack.append((x,y))
    #print dx ,dy
    for i in range(8):
        nx = x+(dx[i])
        ny = y+(dy[i])
        #print nx,ny
        if b[x][y] == c[nx][ny]:
            dfs(nx,ny,co,b,c)
            z=z+1
    return z




if __name__ == '__main__':
  main()

错误:文件“C:\Users\Abhi\Desktop\cbir-p\cvv\test.py”,第 125 行,在 dfs dfs(nx,ny,co,b,c) RuntimeError: 超出最大递归深度

我试图使用 python 在图像中查找连接的组件。我使用递归 dfs 来查找连接的组件。此代码适用于 6*6 矩阵,但用于图像时会出错。在上面的代码中,drblur 是具有图像强度的列表列表。

请帮帮我。

【问题讨论】:

    标签: python image image-processing


    【解决方案1】:

    错误很明显。

    您有两种选择。您可以增加允许的递归深度(您可以了解如何做到这一点here),总结:

    sys.setrecursionlimit(limit)¶
    

    或者您可以将 DFS 更改为迭代而不是递归(您可以在任何优秀的图形算法教科书中找到如何做到这一点)。

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      相关资源
      最近更新 更多