我是 python-opencv 的新手,所以我读了这个 tutorial并找到了一些这样的示例代码:
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))
即将向您展示如何使用 cv2.polylines 函数绘制多边形,其中大部分都很容易理解,我很好奇的是:
pts = pts.reshape((-1,1,2)) #I understand this makes pts.shape to be (4,1,2)
我尝试删除这段代码,发现没有任何区别,它也能正常工作。在这个 reshape 操作之前,pts 的形状是 (4,2),这对我来说足够直观了。此外,当我编写这样的代码时:
convex_pts = cv2.convexHull(pts) #get a convexhull from pts,pts's shape is(4,2)
print(convex_pts) #[[[72,20]],[[20,30]],[[10,5]],[[50,10]]]
print(convex_pts.shape) #(4,1,2)
在我看来,python-opencv 坚持要“解压”它并使它的形状像 (x,1,2),这对我来说很奇怪,因为当形状是 (x,2) 它在教程案例。为什么这是必要的?我搜索了 四处寻找,没有发现任何帮助,我是不是错过了什么?所以我想知道为什么以及在什么情况下需要这样 reshape ?
最佳答案
pts = pts.reshape((-1,1,2))
这会将形状从 (4,2) 更改为 (4,1,2),这与几个 cv2 函数使用的形状一致。例如,如果您想使用 findContours
查找等高线,输出等高线的形状为 (x,1,y)。
关于python - 在什么情况下需要像python-opencv中的reshape(-1,1,2)那样 reshape 点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51723910/