OpenCV-Python:找到极线的正确形状点是什么?

时间:2014-07-02 15:25:17

标签: python arrays opencv numpy

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

“输入点.Nx 1或1 x N矩阵,类型为CV_32FC2或向量< Point2f>”

但是,我不确定这在Python中意味着什么。我尝试使用元组列表,但它不是Numpy数组,所以我尝试了一个Numpy元组数组,但它会自动转换为Nx2矩阵。我还尝试了一个Numpy结构化数组作为元组列表,但是epilines函数然后说“点数据类型= 20不受支持”,这在Google中确实有0个结果。

有谁知道这个功能所需的点阵矩阵的正确形状/类型是什么?

1 个答案:

答案 0 :(得分:0)

似乎有一个问题。类型CV_32FC2实际上是一种包含两个通道(值)的类型。矢量也是如此。

所以,实际上似乎该函数期望具有形状(N,1,2)或(1,N,2)的3D数据。如果您有一个N x 2矩阵M,那么您可以使用:

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

这应该给出一个合适的数组MM形状(1,N,2)。如果这不起作用,请尝试:

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

给出(N,1,2)数组。

此外,cv2可能对数据类型非常挑剔,因此您可能会尝试将您的点转换为正确的类型:

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