使用python从opencv中的findcontours检测到的单个轮廓中提取坐标

时间:2017-11-20 06:09:19

标签: python arrays numpy

这里我的代码将(x,y)存储在OpenCV python中cv2.findcontours找到的两个中。

我选择了一个随机轮廓

c=contour[6]

现在我希望x在单独的数组中检测到y值以执行某些操作

numpy数组以这种方式存储。

[[[ 746  997]]
 [[ 744  998]]
 [[ 742  999]]
 [[ 740 1000]]]

我尝试使用它来提取x值

x = c[:,[0]]

但是我得到了相同的阵列。

所以我尝试使用这个循环提取

    for a in c:
      for b in a:
        s_x = np.append(s_x, b[0])
        s_y = np.append(s_y, b[1])

有没有一种简单的方法可以选择x坐标,而不是通过循环而根本没有这个错误?

3 个答案:

答案 0 :(得分:2)

您的数组似乎有一个额外的维度,因此您可以将其删除,然后索引应该可以正常工作。

x = c.squeeze()[:, 0]

答案 1 :(得分:1)

cnt = cnts[1]             # choose one 
cnt = cnt.reshape(-1,2)   # change the shape 
xs  = cnt[:,0]            # get xs

答案 2 :(得分:1)

您的数组有三个维度。可以使用shape属性查看详细信息。

import numpy as np

c = np.array([[[ 746,  997]],
              [[ 744,  998]],
              [[ 742,  999]],
              [[ 740, 1000]]])
print(c.shape)

(4,1,2)

获得形状后,切割数组。

x = c[:,0,0]
print(x)

[746 744 742 740]