python - 在什么情况下需要像python-opencv中的reshape(-1,1,2)那样 reshape 点?

标签 python numpy opencv

我是 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/

相关文章:

numpy - Dask 数组 from_npy_stack 缺少信息文件

python - 使用 cv.fromarray 将转置的 NumPy 数组转换为 Python 中的 CvMat 类型

python - 使用颜色模型可视化光流

python - 在 pydistutils.cfg 中定义 install-platlib 的问题 --

python - Pandas:灵活聚合级别的最佳习惯用法

python - 使用 matplotlib 生成非重复序列彩色图

python - 如何让我的爬虫从起始页解析数据

python - 获取给定数组值作为权重的平均(行,列)单元格?

python - 多元正态的 Numpy 向量化

opencv滑动窗口