我在OpenCV-Python中使用computeCorrespondEpilines()函数时遇到问题。根据文档,点的矩阵描述为:
“输入点.Nx 1或1 x N矩阵,类型为CV_32FC2或向量< Point2f>”
但是,我不确定这在Python中意味着什么。我尝试使用元组列表,但它不是Numpy数组,所以我尝试了一个Numpy元组数组,但它会自动转换为Nx2矩阵。我还尝试了一个Numpy结构化数组作为元组列表,但是epilines函数然后说“点数据类型= 20不受支持”,这在Google中确实有0个结果。
有谁知道这个功能所需的点阵矩阵的正确形状/类型是什么?
答案 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')
。