在opencv中将轮廓转换为二维点列表

Jay*_*Jay 5 python opencv numpy

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

知道将其转换为二维点列表(nx 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))
Run Code Online (Sandbox Code Playgroud)

lig*_*ist 6

import numpy as np

contours, hierarchy = cv2.findContours(bw_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = np.vstack(contours).squeeze()
Run Code Online (Sandbox Code Playgroud)

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