在 opencv 中将轮廓转换为 2D 点列表



下面是OpenCV返回的轮廓结构。它是深度嵌套的,元组的第一个元素是轮廓中的点列表。

有什么想法将其转换为 2d 点列表 (n x 2) 吗?我认为可以使用numpy.reshape,但我找不到非常通用的方法。谢谢。

contours = cv2.findContours(bw_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours =>
   ([array([[[ 19,  20]],
   [[ 18,  21]],
   [[ 17,  21]],
   [[ 17,  22]],
   [[ 16,  23]],
   [[ 16, 130]],
   [[ 17, 131]],
   [[ 17, 132]],
   [[ 21, 132]],
   [[ 43, 110]],
   [[ 44, 110]],
   [[ 75, 141]],
   [[ 81, 141]],
   [[109, 113]],
   [[145, 149]],
   [[149, 149]],
   [[149,  21]],
   [[148,  21]],
   [[147,  20]]], dtype=int32)], array([[[-1, -1, -1, -1]]], dtype=int32))
import numpy as np
contours, hierarchy = cv2.findContours(bw_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = np.vstack(contours).squeeze()

请注意,cv2.findContours 实际上返回 2 个项目。这里的"轮廓"是一个列表。因此,我们使用numpy的vstack()将它们堆叠在一起,然后squeeze()删除任何多余的轴。

相关内容

  • 没有找到相关文章

最新更新