error : sizes of input arguments do not match. cvTriangulatePoints

error : sizes of input arguments do not match. cvTriangulatePoints

我在 visual studio 上使用了函数 cvTriangulatePoints(参见文档 :http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html)。 当我每个图像有一个对应点 (N=1) 时,代码可以工作,但如果我添加第二个点 (N=2),我会收到以下错误: "error : sizes of input arguments do not match < Number of points must be the same> in cvTriangulatePoints." 这是我第一次使用具有超过 1 个对应点的 cvTriangulatePoints。是否可以添加更多点或者我有另一个错误?

CvMat* projMatr1;
CvMat* projMatr2;
CvMat* projPoints1;
CvMat* projPoints2;
CvMat* points4D;
int N = 2;

projMatr1 = cvCreateMat(3, 4, CV_64FC1);
projMatr2 = cvCreateMat(3, 4, CV_64FC1);
projPoints1 = cvCreateMat(2, N, CV_64FC1);
projPoints2 = cvCreateMat(2, N, CV_64FC1);
points4D = cvCreateMat(4, N, CV_64FC1);
// I fill the matrices with the opencv function cvSet2D()
cvTriangulatePoints(projMatr1, projMatr2, projPoints1, projPoints2, points4D);

当 N(通道数)的值从 1 增加到 2 时,cvCreateMat 中的最后一个参数也应从

更改
CV_64FC1 to CV_64FC2. 
       ^           ^

projPoints1 = cvCreateMat(2, N, CV_64FC2);
projPoints2 = cvCreateMat(2, N, CV_64FC2);
points4D = cvCreateMat(4, N, CV_64FC2);

争论的Cx部分是指通道数。

更一般地说,Mat 对象的类型名称由几个部分组成。这是 CV_64FC1 的示例:

  • CV_ - 图书馆前缀
  • 64 - 每个基本矩阵元素的位数(例如灰度图像中的像素值或 BGR 图像中的单色元素)
  • F - 基本元素的类型。在这种情况下,浮点数是 F,但也可以是 S(有符号)或 U(无符号)
  • Cx - 图像中包含的通道数

...Cx 你应该是 ...C2
...from here

这里有更多关于CvType的信息。