【发布时间】:2017-12-24 12:40:23
【问题描述】:
我编写了这个 python 脚本来跟踪图像。但它抛出了一个错误。它显示 “IndexError: index 181 is out of bounds for axis 0 with size 181” 我的图像尺寸为 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);
【问题讨论】:
-
python 列表从零开始,所以如果 alist 的长度为 5,则第一项是 alist[0],最后一项是 alist[4]
-
尝试在
startTrace中限制yt和xt的范围。它们可能会超出图像的大小,例如ax和ay。 -
跟踪是什么意思?此外,您的
startTrace没有基本条件,递归可能会无限运行。 -
@ZdaR 或由于循环增加而崩溃,没有任何限制。
-
@ZdaR 此代码用于跟踪二进制图像
标签: python numpy opencv image-processing