创建等高线列表

2024-09-30 08:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有(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)

Tags: 代码数据结构列表sizelennp数组轮廓
1条回答
网友
1楼 · 发布于 2024-09-30 08:21:29

问题是轮廓列表中的3D数组必须是int32类型。在我的例子中,我必须把所有的都定义为全部_cnt.A类型(np.int32). 在

如果不使用findConteurs,而希望使用drawContours(),则contours参数应该如下所示:list(array,array,…),其中数组的数据类型是int32,每个数组都是这样的:[[[x1,y1]],[[x2,y2]],[[x3,y3]],[[x4,y4]]。。。]. 每个数组包含1个对象的边界点。在

相关问题 更多 >

    热门问题