这里我的代码将(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坐标,而不是通过循环而根本没有这个错误?
答案 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]