我有(x,y)点表示轮廓线(cnt
)。通过比较数据结构与findContours
返回值(contoure
)的数据结构,我创建了一个看起来几乎相同的列表。
cnt
是3D数组的列表,contoure
是3D数组的列表。在
我得到以下结果:
len(cnt) = 140
len(contoure) = 140
cnt.shape = (20L,1L,2L)
contoure.shape = (20L,1L,2L)
np.size(cnt,0) = 140
np.size(contoure,0) = 140
np.size(cnt) = 5600
np.size(contoure) = 140
我不明白为什么我得到np.size(contoure,1)
的“元组索引超出范围”(注意,contoure[i]
是3D数组!)但是np.size(cnt,1)
没有错误,为什么np.size(cnt) != np.size(contoure)
。在
我假设drawContours不能与cnt
一起工作,因为这个不同,但是我不知道为什么会发生这种情况。在
编辑: 轮廓由findConteurs()调用创建。我不知道cnt是如何创建的,因为我的朋友编写了这部分代码,我只得到以下形式的结果: 所有内容:
^{pr2}$其中x1,y1是描述第一轮廓的n对。而不是使用以下代码:
cnt=[]
for i in range(140):
a=all_cnt[2*i:2*i+2]
a = np.reshape(np.ravel(a,order='F'),(20,1,2))
cnt.append(a)
问题是轮廓列表中的3D数组必须是int32类型。在我的例子中,我必须把所有的都定义为全部_cnt.A类型(np.int32). 在
如果不使用findConteurs,而希望使用drawContours(),则contours参数应该如下所示:list(array,array,…),其中数组的数据类型是int32,每个数组都是这样的:[[[x1,y1]],[[x2,y2]],[[x3,y3]],[[x4,y4]]。。。]. 每个数组包含1个对象的边界点。在
相关问题 更多 >
编程相关推荐