OpenCV-Python: 计算极线时点的正确形状是什么?

0 投票
1 回答
1409 浏览
提问于 2025-04-18 11:53

我在使用OpenCV-Python中的computeCorrespondEpilines()函数时遇到了问题。根据文档,点的矩阵被描述为:

“输入点。N x 1或1 x N的矩阵,类型为CV_32FC2或vector< Point2f >”

但是,我不太明白这在Python中是什么意思。我尝试使用一个元组的列表,但这不是一个Numpy数组,所以我又试了一个元组的Numpy数组,但它自动转换成了一个Nx2的矩阵。我还尝试用Numpy的结构化数组作为元组的列表,但epilines函数却说“points数据类型=20不支持”,在谷歌上几乎找不到相关结果。

有没有人知道这个函数需要的点矩阵的正确形状或类型是什么?

1 个回答

0

这里似乎有个小问题。类型 CV_32FC2 实际上是一个包含两个通道(值)的类型。向量也是一样。

所以,实际上这个函数期待的是三维数据,形状应该是 (N, 1, 2) 或者 (1, N, 2)。如果你有一个 N x 2 的矩阵 M,那么你可以使用这个:

MM = M.reshape((1,-1,2))

这样应该能得到一个形状为 (1, N, 2) 的合适数组 MM。如果这样不行,那就试试:

MM = M.reshape((-1,1,2))

这会给你一个 (N, 1, 2) 的数组。

另外,cv2 对数据类型可能会很挑剔,所以你可以尝试把你的点转换成正确的类型:

MM = M.reshape((-1,1,2)).astype('float32')

也是可以的。

撰写回答