gpt4 book ai didi

python - 停止 Floodfill 算法

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:17 27 4
gpt4 key购买 nike

我被我的洪水填充算法困住了:它在“正常”不应该的时刻停止......

情况是这样的:我有一个 512*512 像素的矩阵,值是 50 或 100 左右。值 50 形成一个正方形,我想将其更改为值 255 的正方形(使用洪水填充算法)。

def FF(matrix,x,y,h):     #h is chosen <=50

stack=[]
matrix[x,y]=255

stack.append((x,y))

while stack!=[]:

(x,y)=stack[0]

stack.pop()


if matrix[x-1,y] <= h: #Pixel North
matrix[x-1,y]=255
stack.append((x-1,y))

if matrix[x,y+1] <= h: #Pixel East
matrix[x,y+1]=255
stack.append((x,y+1))

if matrix[x+1,y] <= h: #Pixel South
matrix[x+1,y]=255
stack.append((x+1,y))

if matrix[x,y-1] <= h: #Pixel West
matrix[x,y-1]=255
stack.append((x,y-1))

if matrix[x-1,y+1] <= h: #Pixel North East
matrix[x-1,y+1]=255
stack.append((x-1,y+1))

if matrix[x+1,y+1] <= h: #Pixel South East
matrix[x+1,y+1]=255
stack.append((x+1,y+1))

if matrix[x+1,y-1] <= h: #Pixel South West
matrix[x+1,y-1]=255
stack.append((x+1,y-1))

if matrix[x-1,y-1] <= h: #Pixel North West
matrix[x-1,y-1]=255
stack.append((x-1,y-1))

else:
print ('... finished')
return

我不知道为什么,但代码可以运行 10 次,但不会更多。

谢谢你,Q。

最佳答案

问题出在这里:

    (x,y)=stack[0] # get the first element of the list
stack.pop() # remove the *last* element

由于您获取了第一个元素,但删除了最后一个元素,因此有可能(就像并且可能总是这样),不会所有插入堆栈的元素都会被评估。

尽管如此,你还是让它太复杂了。只需写:

def FF(matrix,x,y,h):     #h is chosen <=50
stack=[(x,y)]
m,n = matrix.shape
while stack:
x,y = stack.pop()
if 0 <= x < m and 0 <= y < n and matrix[x,y] <= h: # check bounds and height
matrix[x,y] = 255 # set the value
stack.append((x-1,y-1)) # add all directions to the stack, we check later
stack.append((x,y-1))
stack.append((x+1,y-1))
stack.append((x-1,y))
stack.append((x+1,y))
stack.append((x-1,y+1))
stack.append((x,y+1))
stack.append((x+1,y+1))

关于python - 停止 Floodfill 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43345838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com