gpt4 book ai didi

python - 在 python 中跟踪图像

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

我写了这个 python 脚本来跟踪图像。但它抛出一个错误。它显示 “IndexError:索引 181 超出尺寸为 181 的轴 0 的范围”,其中我的图像尺寸为 181x158。我减小了范围以纠正此错误,但是没有用。

import cv2
import numpy as np
global p
a = cv2.imread('t.png',0);
b = (255 -a);
c = np.asarray(b);
p = np.count_nonzero(c)
[ay , ax] = c.shape;
z = np.zeros(c.shape, dtype=np.int)

def startTrace(yt,xt):
global p
p = p-1
z[yt,xt] = 255;
c[yt,xt] =0;
if (c[yt, xt+1] > 0):
startTrace(yt,xt+1)
elif (c[yt+1,xt+1] > 0):
startTrace(yt+1,xt+1)
elif (c[yt+1,xt] > 0):
startTrace(yt+1,xt)
elif (c[yt+1,xt-1] >0) :
startTrace(yt+1,xt-1)
elif (c[yt,xt-1] >0):
startTrace(yt,xt-1)
elif (c[yt-1,xt-1] > 0):
startTrace(yt-1,xt-1)
elif (c[yt-1,xt] > 0):
startTrace(yt-1,xt)
elif (c[yt-1,xt+1] > 0):
startTrace(yt-1,xt+1)


while (p > 0):
for y in range(1,ay-2):
for x in range(1,ax-2):
if c[y,x] > 0 :
startTrace(y,x);

最佳答案

请注意,您的代码是递归的(startTrace 调用自身)并且您不知道它将调用自身多少次。事实上,您能保证对 startTrace() 的一次调用会退出吗? startTrace() 可以永远调用 startTrace() 吗?这最终会导致堆栈溢出。但这不是你的问题(目前)。

代码失败是因为对 startTrace 的每次调用都与对 startTrace() 的原始调用具有不同的参数(+1、-1)。即使在“while”内调用确保你没有越界,如果递归调用 startTrace(),每个新调用可能有原始参数 +1,最终会增长到越界(没有检查在 startTrace() 内部,参数在图像的边界内)。您应该在函数的开头添加一个 if 以检查 xt 和 yt 是否在图像的边界内。

无论如何,我建议在 OpenCV 中搜索一种可以满足您要求的方法。例如,看看 findContours。

关于python - 在 python 中跟踪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917906/

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