如何在Python3中格式化numpy数组的输出?

时间:2017-05-08 17:35:28

标签: python arrays opencv numpy

我无法按照我想要的方式格式化我的numpy数组。我检查了几个帖子,如How to remove specific elements in a numpy array,大多数似乎很接近,但没有一个我想要的。如果这个问题是一个重复点,我指向正确的方向。

im2, contours, hierarchy = cv2.findContours(th2,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

轮廓给了我这个:

print(contours)

我明白了:

[array([[[618, 737]]], dtype=int32), array([[[615, 737]]], dtype=int32), array([[[656, 731]],
   [[655, 732]],

   [[651, 732]],

   [[649, 734]],

   [[648, 734]],

   [[647, 735]],

   [[646, 734]],

   [[645, 735]],

   [[644, 735]],

   [[643, 736]],

   [[641, 736]],

   [[640, 737]],

       [[686, 737]],

       [[686, 734]],

但是我希望得到的输出可以为我提供这种格式的元组:

(x, y)

或者如果有另一种方法我可以访问数组中的整数,这些整数我已经尝试但是没有得到我想要的东西

contours = tuple(map(tuple, contours))

contours = totuple(contours)

请帮助我成为新手

1 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

[[tuple(xy[0]) for xy in contour] for contour in contours]

#[[(618, 737)],
# [(615, 737)],
# [(656, 731), (655, 732), (651, 732), (649, 734), (648, 734)]]

如果你想要一个平面列表:

[tuple(xy[0]) for contour in contours for xy in contour]

#[(618, 737),
# (615, 737),
# (656, 731),
# (655, 732),
# (651, 732),
# (649, 734),
# (648, 734)]