OpenCV-Python: 计算极线时点的正确形状是什么?
我在使用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')
也是可以的。