gpt4 book ai didi

python - 创建轮廓列表

转载 作者:行者123 更新时间:2023-12-02 16:40:00 24 4
gpt4 key购买 nike

我有(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,但我不知道为什么会发生这种情况。

编辑:
轮廓是通过findContours()调用创建的。我不确切知道如何创建cnt,因为我的 friend 对那部分代码进行了编程,因此我只能以以下形式获得结果:
all_cnt:
x11 x12 ... x1n
y11 y12 ... y1n
.
.
xm1 xm2 ... xmn
ym1 ym2 ... ymn

其中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类型。在我的情况下,我必须将all_cnt定义为all_cnt.astype(np.int32)。

如果您不使用findContours并想使用drawContours(),则轮廓参数应如下所示:list(array,array,...),其中array的dtype为int32,每个数组如下所示:[[ [x1,y1]],[[x2,y2]],[[x3,y3]],[[x4,y4]],...]。
每个数组包含1个对象的边界点。

关于python - 创建轮廓列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26504178/

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